[Programmers] 로또의 최고 순위와 최저 순위

Jay Mild Lee·2022년 11월 22일
0

Algorithm Problems

목록 보기
9/16

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

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

1. 문제 설명

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다.

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.

민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 동생이 지워서 알아볼 수 없는 숫자는 0으로 표시됩니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

2. 제한 사항

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

3. 풀이

로또 번호 순위를 동생이 지운 번호가 다 맞았을 때와, 안맞았을 때로 구분하면 되는 간단한 문제. 동생이 지운 번호의 수를 free, 지워지지 않은 번호 중 맞은 번호의 수를 score로 저장하고 순위를 판별했다.

결론적으로, 다음과 같이 진행했다.
1. 2중 for문을 통해 freescore를 구한다.
2. 점수에 따라 등수를 판별한다. (예외처리 포함)

4. 소스 코드

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        int score = 0;
        int free = 0;
        for (int i = 0; i < 6; i++) {
            if(lottos[i] == 0){
                free++;
            }
            else{
                for (int j = 0; j < 6; j++) {
                    if(lottos[i] == win_nums[j]){
                        score++;
                        break;
                    }
                }
            }
        }

        answer[0] = 6 - score - free + 1;
        answer[1] = 6 - score + 1;
        if (answer[1] > 6){
            answer[1] = 6;
        }
        if (answer[1] < 1){
            answer[1] = 1;
        }
        if (answer[0] < 1){
            answer[0] = 1;
        }
        if (answer[0] > 6 ){
            answer[0] = 6;
        }
        return answer;
    }
}

0개의 댓글