본문 바로가기
Problem Solving

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

by vanilalatte 2026. 4. 23.
일부 번호를 알아볼 수 없는 로또 번호 배열에서, 0의 개수와 확정 일치 개수를 이용해 최고 순위와 최저 순위를 구하는 문제.

 

1. 문제 유형

구현, 배열, 완전탐색(브루트포스)

 

2. 내가 놓친 포인트

처음 떠올린 접근 : 순위를 직접 계산하려고 했다.
max = 6, min = 6처럼 두고 맞을 때마다 줄이는 방식으로 접근했다.

오답 원인: 맞은 수 0,1 둘다 6등인데 이 부분을 어떻게 해결할지 떠올리지 못했다.

 

3. 핵심 로직 & 해결 방법

핵심 조건: 0은 알아볼 수 없는 번호이므로 최저 순위는 0이 전부 틀린 경우, 최고 순위는 0이 전부 맞은 경우로 계산한다.

풀이 아이디어:

  1. 로또 번호 배열을 순회하면서 0의 개수를 센다.
  2. 0이 아닌 숫자는 당첨 번호 배열과 비교해서 확정 일치 개수를 센다.
  3. best = matchCount + zeroCount, worst = matchCount
  4. 일치 개수를 순위로 변환해서 반환한다.

4. 구현 코드

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int zeroCount = 0;
        int matchCount = 0;

        for (int num : lottos) {
            if (num == 0) {
                zeroCount++;
                continue;
            }

            for (int j = 0; j < 6; j++) {
                if (num == win_nums[j]) {
                    matchCount++;
                    break;
                }
            }
        }

        int[] rank = {6, 6, 5, 4, 3, 2, 1};

        int best = matchCount + zeroCount;
        int worst = matchCount;

        return new int[]{rank[best], rank[worst]};
    }
}

시간 복잡도: O(1) / 공간 복잡도: O(1)


 

인사이트

  • 순위 로직 말고도 자바 문법(배열)에서 실수한 부분이 있었다. 앞으로는 문법에서 틀리는 일이 없도록 연습해야겠다.

 

 

문제 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/77484