Coding Test/[프로그래머스] Java

[프로그래머스 / Java] Lv.1 로또의 최고 순위와 최저 순위

annovation 2025. 9. 27. 11:02

Question

https://school.programmers.co.kr/learn/courses/30/lessons/77484

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


Algorithm

  1. 순서와 상관없이 주어진 win_nums와 일치하는 번호를 구하면 된다.
    • lottos 배열을 확인하면서 0의 개수를 세어 zero에 저장한다.
    • 당첨 번호(win_nums)와 일치하는 번호의 개수를 세어 count에 저장한다.
  2. 최고 순위 count + zero를 맞췄다고 가정했을 때의 등수이다.
  3. 최저 순위 count만 맞췄다고 가정했을 때의 등수이다.
  4. 맞춘 개수에 따라 등수를 반환하는 rank() 메서드를 만든다.
  5. answer[0]에는 최고 순위를, answer[1]에는 최저 순위를 저장하여 반환한다.

Code

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        
        // lottos에 win_nums와 일치하는 번호 개수
        int count = 0;
        // lottos 0의 개수
        int zero = 0;
        
        // lottos 배열의 각 번호를 확인
        for (int i = 0; i < lottos.length; i++) {
            if (lottos[i] == 0) {
                zero++;
                continue; // 다음 번호 확인
            }
            // 번호가 0이 아닌 경우, 당첨 번호(win_nums)와 비교
            for (int j = 0; j < win_nums.length; j++) {
                if (win_nums[j] == lottos[i]) {
                    count++;
                    continue;
                }
            }
        }
        
        answer[0] = rank(count + zero);
        answer[1] = rank(count);
        
        return answer;
    }
    
    // 맞춘 번호 개수에 따라 순위를 반환하는 메서드
        private static int rank(int num) {
            if (num == 6) { 
                return 1; // 6개 맞추면 1등
            } else if (num == 5) {
                return 2; // 5개 맞추면 2등
            } else if (num == 4) {
                return 3;
            } else if (num == 3) {
                return 4;
            } else if (num == 2) {
                return 5;
            } else {
                return 6;
            }
        }
}

 

🔎 프로그래머스 다른 사람의 풀이

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