ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20230829 - temp
    C#/C# 알고리즘 2023. 8. 29. 23:54

    I. 알고리즘 - 프로그래머스

    1. 내적

     

    길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

     

    이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

     

    제한사항
    a, b의 길이는 1 이상 1,000 이하입니다.
    a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

     

    !! 나의 풀이

    using System;
    using System.Linq;
    
    public class Solution {
        public int solution(int[] a, int[] b) {
            return a.Select((t, idx) => b[idx] * t).Sum();
        }
    }

     

    !! 모범 풀이

    using System;
    using System.Linq;
    
    public class Solution
    {
        public int solution(int[] a, int[] b)
        {
            return a.Zip(b, (t1, t2) => t1 * t2).Sum(); 
        }
    }

     

    깨달은 점

     

    1. Zip 메서드를 통해 병합을 하여, 더 깔끔하게 두 배열간 요소내 연산을 보여줌.

     =>

      Zip()

        : 지정된 함수를 두 시퀀스의 해당 요소에 적용하여 결과 시퀀스를 만듦.

     

    static void Main(string[] args)
    {
        int[] numbers = { 1, 2, 3, 4, 5 };
        string[] words = { "하나", "둘", "셋", "넷" };
    
        IEnumerable<string> zipExample = numbers.Zip(words, (num, word) => $"{num} = {word}");
        // 혹은 var 가능. IEnumerable을 반환값으로 받기 때문에, 문자열배열이나 리스트는 반환값으로 불가능함.
    
        foreach (var item in zipExample)
        {
            Console.WriteLine(item);
        }
    }

    >

     

    var

       : 익명 형식을 선언할 때 사용하는 키워드.

       : 지역 변수를 선언할 때, var 키워드를 통해 변수의 형식을 유추할 수 있음.

    static void Main(string[] args)
    {
        var greeting = "Hello";
        Console.WriteLine($"greeting의 타입 : {greeting.GetType().Name}");
    
        var arrayEx = new[] { 1, 2, 3 };
        Console.WriteLine($"arrayEx의 타입 : {arrayEx.GetType().Name}");
    }

    >

     

      : 따라서, 해당 데이터의 타입을 간단히 임시로 만들어 사용하므로, Linq를 사용할 때 편하게 쓰임.

    //IEnumerable<string> zipExample = numbers.Zip(words, (num, word) => $"{num} = {word}");
    var zipExample = numbers.Zip(words, (num, word) => $"{num} = {word}");

     

     

      : 익명 형식은 프로퍼티를 가질 수 있다.

      : 새로운 클래스를 만들지 않고, 바로 객체를 생성할 때 유리할듯.

    static void Main(string[] args)
    {
        var person = new { FirstName = "Franc", LastName = "Ji", Age = 28 };
    
        Console.WriteLine($"Name: {person.FirstName} {person.LastName}, Age: {person.Age}");
    }

     : 하지만, 읽기 전용으로만 사용가능하다. ( 정해진 속성값은 수정 불가능함.)

     

     

      : 함부로 수정되면 곤란한 데이터를 읽을 때, 유용할듯?

    var fromPhoenix = from cust in customers
                      where cust.City == "Phoenix"
                      select new { cust.Name, cust.Phone };
    
    foreach (var customer in fromPhoenix)
    {
        Console.WriteLine($"Name={customer.Name}, Phone={customer.Phone}");
    }

     

    2. 가운데 글자 반환하기

    단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

     

    제한사항
    s는 길이가 1 이상, 100이하인 스트링입니다.

     

     

    !! 나의 풀이

    public class Solution {
        public string solution(string s) {
            string answer = "";
            answer = (s.Length % 2 == 1)? s[(s.Length - 1) / 2].ToString() : s[(s.Length / 2) - 1].ToString() + s[s.Length / 2].ToString();
            return answer;
        }
    }

     

    !! 모범 풀이

    public class Solution {
        public string solution(string s) {
            int n = (s.Length+ 1)%2;
            int l = s.Length/2 - n;
            return s.Substring(l, n + 1);
        }
    }

     

    깨달은 점

     

    1. Substring 메서드를 활용하여 필요에 따라 파라미터를 입력함으로써 문자열을 잘라냄

     =>

      Substring()

        : 부분 문자열을 검색

     

    "검색할 문자열".Substring("문자열 검색을 시작할 인덱스", "검색할 길이")

     

    static void Main(string[] args)
    {
        string substringEx = "12345678";
        Console.WriteLine(substringEx.Substring(3, 2));      // 45
        Console.WriteLine(substringEx.Substring(3));         // 45678
                      // 검색할 길이를 정하지 않으면, 문자열 끝까지 검색함을 확인.
    }

     

    'C# > C# 알고리즘' 카테고리의 다른 글

    20231005  (1) 2023.10.05
    20230905  (0) 2023.09.05
    20230904  (0) 2023.09.04
    230828-temp  (1) 2023.08.28
Designed by Tistory.