본문 바로가기

알고리즘

프로그래머스 - 로또의 최고 순위와 최저 순위(Java)

단순 구현문제 입니다.

 

자신의 번호 6개와 로또 번호 6개가 주어졌을 때, 몇등인지 알아내는 문제입니다.

단, 자신의 번호에 0이 주어졌을 경우 최대, 최소 등수를 알아내야 합니다.

모든 수는 중복되지 않으므로 0이 어떤 숫자인지 알아낼 필요가 없습니다.

 

우선 0의 개수를 알아내고, 자신의 번호와 로또 번호의 일치 개수를 알아냅니다.

최대를 만들 경우에는 일치 개수와 0의 개수를 더하면 됩니다.

최소를 만들 경우에는 일치 개수만을 맞췄다고 고려하면 됩니다.

 

또,

'등수 = (7 - 일치 개수)'의 공식이 도출될 수 있습니다.

단, 하나도 맞추지 못하는 경우 및 0이 없는 경우만의 최소와 최대를 고려해야 합니다.

 

[구현 코드]

class Solution {
    public static int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];

        int zeroCnt = 0;
        for (int i : lottos) {
            if (i == 0) zeroCnt++;
        }

        int isMat = isMatch(lottos, win_nums);

        int max = isMat + zeroCnt;
        int min;

        if (isMat == 0 || isMat == 1) {
            if(zeroCnt == 0) {
                max = 1;
            }
            min = 1;
        } else {
            min = isMat;
        }

        answer[0] = 7 - max;
        answer[1] = 7 - min;

        return answer;
    }


    private static int isMatch(int[] lottos, int[] win_nums) {
        int cnt = 0;
        for (int lotto : lottos) {
            for (int win_num : win_nums) {
                if (lotto == win_num) cnt++;
            }
        }
        return cnt;
    }
}