코딩테스트/Programmers

[프로그래머스] 로또의 최고 순위와 최저 순위

grove1212 2025. 3. 5. 16:07

1. 내 풀이

미리 정렬을 해놓음으로서 탐색을 좀 더 용이하게 만들었다.

import java.util.Arrays;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        Arrays.sort(lottos);
        Arrays.sort(win_nums);
        int correctLotto = 0;
        int zeroCount = 0;
        
        for(int i = 0, j = 0; i < lottos.length && j < lottos.length; i++){
            if(lottos[i] == 0){
                zeroCount++; continue;
            }
            if(win_nums[j] == lottos[i]) {
                correctLotto++; j++;
            }
            else if(win_nums[j] < lottos[i]){
                i--;
                j++;
            }
        }
        
        answer[0] = correctLotto + zeroCount;
        answer[1] = correctLotto;
        
        answer[0] = switch(answer[0]) {
            case 6 -> 1;
            case 5 -> 2;
            case 4 -> 3;
            case 3 -> 4;
            case 2 -> 5;
            default -> 6;
        };
        
        answer[1] = switch(answer[1]) {
            case 6 -> 1;
            case 5 -> 2;
            case 4 -> 3;
            case 3 -> 4;
            case 2 -> 5;
            default -> 6;
        };
        
        return answer;
    }
}

 

 

2. 다른 분 풀이

hashMap을 이용했다. 중복값이 없다는 점이 있다.

순위를 구하기 위해 반전을 시켜놓았다.

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
        int zeroCount = 0;

        for(int lotto : lottos) {
            if(lotto == 0) {
                zeroCount++;
                continue;
            }
            map.put(lotto, true);
        }


        int sameCount = 0;
        for(int winNum : win_nums) {
            if(map.containsKey(winNum)) sameCount++;
        }

        int maxRank = 7 - (sameCount + zeroCount);
        int minRank = 7 - sameCount;
        if(maxRank > 6) maxRank = 6;
        if(minRank > 6) minRank = 6;

        return new int[] {maxRank, minRank};
    }
}