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

윤준혁·2024년 3월 14일

나의 풀이

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2]; // 1
        int result = 0;
        int zero = 0;

        for (int i = 0; i < lottos.length; i++) { // 2
            if (lottos[i] == 0) {
                zero++;
                continue;
            }
            for (int j = 0; j < win_nums.length; j++) {
                if (lottos[i] == win_nums[j]) {
                    result++;
                    break;
                }
            }
        }

        switch (result + zero) { // 3
            case 2:
                answer[0] = 5;
                break;
            case 3:
                answer[0] = 4;
                break;
            case 4:
                answer[0] = 3;
                break;
            case 5:
                answer[0] = 2;
                break;
            case 6:
                answer[0] = 1;
                break;
            default:
                answer[0] = 6;
                break;
        }
        
        switch (result) { // 4
            case 2:
                answer[1] = 5;
                break;
            case 3:
                answer[1] = 4;
                break;
            case 4:
                answer[1] = 3;
                break;
            case 5:
                answer[1] = 2;
                break;
            case 6:
                answer[1] = 1;
                break;
            default:
                answer[1] = 6;
                break;
        }
        
        return answer;
    }
}

과정

  1. answer에는 최고 등수와 최저 등수만 들어가면 되니까 크기를 2로 만들고, 남은 숫자 중 맞은 숫자의 개수를 기록할 result와 0의 개수를 기록할 zero를 선언
  2. lottos와 win_nums를 순회하며 맞은 개수와 0의 개수를 찾는다
  3. 맞은 갯수와 0의 갯수를 합한 값이 최댓값이니 switch문으로 알맞은 등수를 찾아준다
  4. 맞은 갯수만 들어간 값이 최솟값이니 switch문으로 알맞은 등수를 찾아준다

다른 사람 풀이

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};
    }
}

0개의 댓글