본문 바로가기
코딩 테스트/[JAVA] programmers 코딩 테스트 연습

[No.3] 로또의 최고 순위와 최저 순위 / 프로그래머스 코딩 테스트 연습

by M개발자 2021. 6. 2.
반응형

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


문제 설명

 

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

 

순위당첨 내용
1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(낙첨) 그 외

 

 

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

 

programmers 로또의 최고 순위와 최저 순위

 

 

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


예시

 

lottos win_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]
[0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25] [1, 6]
[45, 4, 35, 20, 3, 9] [20, 9, 3, 45, 4, 35] [1, 1]

코드 해석 및 전체 코드

 

반환할 값은 로또의 최고 순위와 최저 순위로 answer[0]은 최고 순위, answer[1]은 최저 순위가 저장된다. 

 

민우의 로또 번호와 당첨 번호를 각각 비교하기 위해서 이중 for문을 통해 비교한다.

바깥 for문 i는 민우의 로또 번호, 안쪽 for문 j는 당첨 번호이다.

 

바깥쪽 for문의 if문에서 lottos[i]가 0이면 answer[0]을 증가시킨다. 

알 수 없는 번호는 0으로 표시되어 있는데, 최고 순위는 0이 당첨되었다고 가정한다.

그러므로 민우의 로또 번호가 0이면 최고 순위가 담길 answer[0]을 증가시킨다.

 

안쪽 for문의 if문에서는 lottos[i]와 win_nums[j]가 같으면 최저 순위가 담길 answer[1]을 증가시킨다.

최저 순위에선 알 수 없는 번호는 맞지 않다고 가정하므로 알 수 있는 번호만으로 구하는 순위는 최저 순위이다. 

 

현재 answer[0]은 알 수 없는 번호의 개수, answer[1]은 알 수 있는 번호 중 당첨 번호와 같은 번호의 개수가 들어있다. 

그러므로 answer[0]에 answer[1]을 더해준다. 

 

두번째 for문은 순위를 구하는 for문이다. 두개의 순위를 구하므로 2번 반복한다. 

순위를 구하기 위한 순위와 일치번호 개수에서의 규칙은 7에서 맞은 개수를 빼면 된다.

맞은 개수 6 : 순위 = 7 - 6(=맞은 개수) = 1 

하지만 1 이하(0, 1)는 6등인 낙첨인데 0일 경우에는 규칙으로 순위를 구할 수 없으므로

if문을 통해 answer[i]가 0일 경우 answer[i]를 6으로 저장한다. 

 

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        
        for(int i = 0; i < lottos.length; i++){
      		if(lottos[i] == 0) answer[0]++;
            for(int j = 0; j < win_nums.length; j++){
                if(lottos[i] == win_nums[j]) answer[1]++;
            }
        }
        
        answer[0] += answer[1];
        
        for(int i = 0; i < 2; i++){
            if(answer[i] == 0) answer[i] = 6;
            else answer[i] = 7 - answer[i];
        }
        return answer;
    }
}

github

programmers

 

반응형

댓글