알고리즘 공부

99클럽 코테 스터디 39일차 TIL

HD9504 2024. 8. 29. 20:47

로또 순위 계산 문제 풀이

문제 설명

이 문제는 로또 번호를 맞추는 게임에서 주어진 로또 번호와 당첨 번호를 비교하여 가능한 최고 순위와 최저 순위를 구하는 문제입니다. 로또 번호는 총 6개로 구성되며, 일부 번호는 0으로 표시되어 있어, 이 번호는 어떤 숫자와도 매칭될 수 있습니다. 이 문제는 이러한 로또 번호와 당첨 번호를 비교하여, 당첨될 수 있는 최고 순위와 최저 순위를 계산하는 것입니다.

나의 풀이

아래 코드는 주어진 로또 번호(lottos)와 당첨 번호(win_nums)를 비교하여 가능한 최고 순위와 최저 순위를 계산하는 자바 프로그램입니다.

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

        int result = 0;
        int countZero = 0;
        for(int i = 0; i<lottos.length; i++){
            int lottosNumber = lottos[i];
            if(lottosNumber != 0){
                for(int subIndex = 0; subIndex < win_nums.length; subIndex++){
                    int num = win_nums[subIndex];
                    if(num == lottosNumber){
                        result += 1;
                    }
                }
            } else {
                countZero += 1;
            }
        }

        int best = (7 - (result + countZero)) < 6 ? (7 - (result + countZero)) : 6;
        int worst = (7 - result) < 6 ? (7 - result) : 6;
        int[] answer = new int[] {best, worst};   

        return answer;
    }
}

풀이 설명

  1. 변수 초기화

    • result: 당첨 번호와 일치하는 로또 번호의 개수를 저장합니다.
    • countZero: 로또 번호 중 0의 개수를 세어 저장합니다. 0은 어떤 숫자로도 변환될 수 있으므로, 당첨 번호를 맞출 가능성을 높이는 요소입니다.
  2. 로또 번호 비교

    • 주어진 lottos 배열을 순회하면서, 각 로또 번호를 win_nums 배열의 당첨 번호와 비교합니다.
    • 로또 번호가 0이 아닌 경우, 당첨 번호와 비교하여 일치하는 번호가 있으면 result를 증가시킵니다.
    • 로또 번호가 0인 경우, countZero를 증가시켜 0의 개수를 카운트합니다.
  3. 최고 순위와 최저 순위 계산

    • 최고 순위(best): 당첨된 숫자(result)에 0의 개수(countZero)를 더한 결과를 바탕으로 계산합니다. 0이 모두 당첨 번호로 변환될 수 있으므로, 최대한 많은 번호를 맞출 수 있는 경우의 순위입니다.
    • 최저 순위(worst): 당첨된 숫자(result)만을 고려하여 계산합니다. 이 경우 0은 모두 당첨되지 않은 번호로 간주합니다.
    • 순위는 7 - (맞춘 번호 수)로 계산되며, 맞춘 번호가 없을 경우 순위는 6위로 고정됩니다.
  4. 결과 반환

    • 계산된 최고 순위와 최저 순위를 배열로 반환합니다.

예제 설명

예를 들어, 로또 번호가 [44, 1, 0, 0, 31, 25]이고, 당첨 번호가 [31, 10, 45, 1, 6, 19]인 경우:

  • 0을 제외한 로또 번호 중 맞춘 번호는 2개 (131)입니다.
  • 최고 순위는 2개의 맞춘 번호에 2개의 0을 더하여 4개의 번호를 맞춘 경우로, 순위는 3위입니다.
  • 최저 순위는 2개의 맞춘 번호만 고려하여 5위가 됩니다.
  • 따라서 결과는 [3, 5]가 됩니다.