본문 바로가기

문제 풀이/Programmers

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

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr


[풀이]

1. lottos의 배열을 한번 탐색하면서 0의 개수, 즉 모르는 개수를 구한다.

2. 또한 1. 을 실행하면서 같은 값이 있다면 맞는 번호이므로 총 맞는 개수를 구해준다.

3. 7 - 개수 == 등수가 되므로 해당 방법을 사용해 등수를 구한다.

4. 3. 에서 최고값을 구하든 최솟값을 구하든 7이 나오면 문제가 발생하므로 해당 부분을 예외처리해준다.

5. 결과를 출력한다.

[접근]

1. 0의 개수를 구해서 0이 모두 맞는 번호가 된다는 가정으로 최댓값을 구하고 하나도 맞지 않는다는 가정으로 최솟값을 구하면 될 것이라고 생각하였다.

[코드]

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int zero = 0;
        int count = 0;
        int[] answer = new int[2];
        
        for (int i = 0; i < lottos.length; i++) {
            // 모르는 번호 개수 구하기
            if (lottos[i] == 0) {
                zero++;
                continue;
            }
            
            // 맞는 숫자 개수 구하기
            for (int j = 0; j < win_nums.length; j++) {
                if (win_nums[j] == lottos[i])
                    count++;
            }
        }
        
        // 1 -> 6개
        // 2 -> 5개
        // 3 -> 4개
        // 4 -> 3개
        // 5 -> 2개
        // 6 -> 1이하
        // 7 - 갯수 == 등수
        // 단, 7로 계산을 하면 7이 출력될 수 있으므로 해당 부분을 처리해줘야 함

        // 모르는 번호가 다 맞다고 가정
        answer[0] = 7 - (count + zero) >= 6 ? 6 : 7 - (count + zero);
            // <= 1 ? 1 : 7 - (count + zero);
        // 모르는 번호가 다 틀렸다고 가정
        answer[1] = 7 - count >= 6 ? 6 : 7 - count;
        
        return answer;
    }
}