일부 번호를 알아볼 수 없는 로또 번호 배열에서, 0의 개수와 확정 일치 개수를 이용해 최고 순위와 최저 순위를 구하는 문제.
1. 문제 유형
구현, 배열, 완전탐색(브루트포스)
2. 내가 놓친 포인트
처음 떠올린 접근 : 순위를 직접 계산하려고 했다.
max = 6, min = 6처럼 두고 맞을 때마다 줄이는 방식으로 접근했다.
오답 원인: 맞은 수 0,1 둘다 6등인데 이 부분을 어떻게 해결할지 떠올리지 못했다.
3. 핵심 로직 & 해결 방법
핵심 조건: 0은 알아볼 수 없는 번호이므로 최저 순위는 0이 전부 틀린 경우, 최고 순위는 0이 전부 맞은 경우로 계산한다.
풀이 아이디어:
- 로또 번호 배열을 순회하면서 0의 개수를 센다.
- 0이 아닌 숫자는 당첨 번호 배열과 비교해서 확정 일치 개수를 센다.
- best = matchCount + zeroCount, worst = matchCount
- 일치 개수를 순위로 변환해서 반환한다.
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
'Problem Solving' 카테고리의 다른 글
| [Java] 프로그래머스 - N개의 최소공배수 (0) | 2026.04.28 |
|---|---|
| [JAVA] 프로그래머스 - 기사단원의 무기 (0) | 2026.04.24 |
| [Java] 프로그래머스 - 택배상자 (0) | 2026.04.22 |
| [Java] 프로그래머스 - 모의고사 (0) | 2026.04.21 |
| [Java] 프로그래머스 - 체육복 (0) | 2026.04.20 |