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

진예·2024년 1월 2일
0

Programmers

목록 보기
38/45
post-thumbnail

📌 문제

Lv1. 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다.
로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.

알아볼 수 없는 번호0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니다. 당첨 번호 6개가 31, 10, 45, 1, 6, 19라면, 당첨 가능한 최고 순위와 최저 순위의 한 예는 아래와 같습니다.

  • 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다.
  • 알아볼 수 없는 두 개의 번호를 각각 10, 6이라고 가정하면 3등에 당첨될 수 있습니다.
    • 3등을 만드는 다른 방법들도 존재합니다. 하지만, 2등 이상으로 만드는 것은 불가능합니다.
  • 알아볼 수 없는 두 개의 번호를 각각 11, 7이라고 가정하면 5등에 당첨될 수 있습니다.
    • 5등을 만드는 다른 방법들도 존재합니다. 하지만, 6등(낙첨)으로 만드는 것은 불가능합니다.

      민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

✔️ 제한사항

  • lottos는 길이 6인 정수 배열입니다.

  • lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
    • 0알아볼 수 없는 숫자를 의미합니다.
    • 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
    • lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.

  • win_nums은 길이 6인 정수 배열입니다.

  • win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.

  • win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
    • win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

✏️ 입출력

  1. 입출력 예 #1 : 문제 예시와 같습니다.

  2. 입출력 예 #2 : 알아볼 수 없는 번호들이 아래와 같았다면, 1등과 6등에 당첨될 수 있습니다.

  3. 입출력 예 #3 : 민우가 구매한 로또의 번호와 당첨 번호가 모두 일치하므로, 최고 순위와 최저 순위는 모두 1등입니다.

💡 코드

lottos의 요소 중 알아볼 수 없는 번호, 즉, 0의 개수zero에, win_nums의 요소와 일치하는 번호의 개수cnt에 저장한다.

최선의 경우는 알아볼 수 없는 0모두 당첨 번호에 해당하는 경우이고, 최악의 경우는 0모두 당첨 번호에 해당하지 않는 경우이다. 일치하는 번호의 개수최선의 경우 cnt+zero개, 최악의 경우 cnt개이다.

최고 등수와 최저 등수를 배열에 담아야 하므로 answer최선, 최악의 경우일 때의 일치하는 번호의 개수를 담아준 후, switch~case문을 통해 해당 개수에 해당하는 등수값을 담아 리턴한다.

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        
        int cnt = 0; // 정확한 수 중 일치한 개수
        int zero = 0; // 0의 개수
        
        for(int i=0;i<lottos.length;i++) {
            int tmp = lottos[i];
            if(tmp == 0) {
                zero++; continue;
            }
            
            for(int j=0;j<win_nums.length;j++) {
                if(tmp == win_nums[j]) {
                    cnt++; break;
                }
            }
        }
        
        int[] answer = {cnt+zero, cnt};
        
        for(int i=0;i<2;i++) {
            switch(answer[i]) {
                case 6 : answer[i] = 1; break;
                case 5 : answer[i] = 2; break;
                case 4 : answer[i] = 3; break;
                case 3 : answer[i] = 4; break;
                case 2 : answer[i] = 5; break;
                default : answer[i] = 6;
            }
        }
        return answer;
    }
}

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글