모름

level의 다소 간단한 문제이다.

내가 푼것은 아래와 같은데... 일단 평범한 답변이니 패스하고, 다른 문제 풀이에서 좋아요를 많이 받은 코드를 다시 살펴볼까한다.

 

[처음으로 푼거]

using System;

public class Solution {
    public int[] solution(int[] lottos, int[] win_nums)
    {

        int rightCount = 0;
        int errorNumber = 0;
        int maxRight = 0;
        int minRight = 0;

        for (int i = 0; i < lottos.Length; i++)
        {
            if (lottos[i] == 0) errorNumber++;
            
            for (int j = 0; j < win_nums.Length; j++)
            {
                if (lottos[i] == win_nums[j])
                {
                    rightCount++;
                }
            }
        }

        maxRight = CalWinLevel(rightCount + errorNumber);
        minRight = CalWinLevel(rightCount);
        
        int[] answer = new int[] {maxRight, minRight};
        return answer;
    }

    int CalWinLevel(int rightCount){
        int cal = 7 - rightCount;
        
        if(cal > 6)
            cal = 6;
        
        return cal;
    }
}

 

 

[다른 분이 푼 코드]

using System;
using System.Linq;

public class Solution 
{
    public int[] solution(int[] lottos, int[] win_nums) 
    {
        int winCount = lottos.Intersect(win_nums).Count();
        int loseCount = lottos.Where((number) => number != 0).Count() - winCount;

        int[] answer = new int[] {WinCountToRank(6-loseCount), WinCountToRank(winCount)};
        return answer;
    }

    public int WinCountToRank(int count)
    {
        if (count <= 1)
        {
            return 6;
        }

        return 7-count;
    }
}

 

Linq를 사용한 것인데, 교집합을 추려내는 Intersect와, Where()를 통한 조건문을 사용했다. 위와같이 내가 처음에 썼던 로직에 Linq를 적용하면 아래와 같이 적용 할 수 있다.

 

using System;
using System.Linq;

public class Solution {
    public int[] solution(int[] lottos, int[] win_nums)
    {
        int rightCount = lottos.Intersect(win_nums).Count();
        int errorNumber = lottos.Count(x => x== 0);
        
        int maxRight = CalWinLevel(rightCount + errorNumber);
        int minRight = CalWinLevel(rightCount);
        
        int[] answer = new int[] {maxRight, minRight};
        return answer;
    }

    int CalWinLevel(int rightCount){
        int cal = 7 - rightCount;
        if(cal > 6) cal = 6;
        return cal;
    }
}

 

하지만 Linq로 가독성이 좋아진만큼 계산시간은 더 오래 걸린다. 

처음 풀었던 코드 결과 
두번째 풀었던 결과