문제
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
로또를 구매해서 번호가 있어 알아볼 수 없는 번호와 알아볼 수 있는 번호가 주어졌을 때, 최대/최소로 몇등까지 할 수 있었는지 구하는 문제이다.
6번 선형적으로 순회해서 숫자를 찾는 것은 비효율적이라고 생각해, 집합을 사용했다.
당첨 번호에서 내 복권의 보이는 숫자들중 몇개가 맞는지 + 알아 볼 수 없는 번호의 수 두가지를 계산해야한다.
알아볼 수 없는 번호가 모두 맞았을 때의 등수 : 최대 등수
알아볼 수 없는 번호가 모두 틀렸을 때의 등수 : 최소 등수
라고 볼 수 있다.
1. 당첨번호를 모두 집합에 넣는다.
2. 집합에 있으면 당첨 될 수 있는 번호와 0이라면 알아볼 수 없는 번호의 개수를 센다.
3. 두가지를 개수를 모두 더해서 최대 등수를 구하고 당첨될 수 있는 번호의 개수로 최소 등수를 구한다.
소스코드
import java.util.HashSet;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
HashSet<Integer> set = new HashSet<>();
for (int num : win_nums) {
set.add(num);
}
int cnt = 0;
int zeroCnt = 0;
for (int num : lottos) {
if (set.contains(num)) {
cnt++;
}
if (num == 0) {
zeroCnt++;
}
}
int maxLevel = getLevel(cnt + zeroCnt);
int minLevel = getLevel(cnt);
return new int[] {maxLevel, minLevel};
}
int getLevel(int correctCnt) {
switch(correctCnt) {
case 6:
return 1;
case 5:
return 2;
case 4:
return 3;
case 3:
return 4;
case 2:
return 5;
default:
return 6;
}
}
}
실행결과

'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] 큰 수 만들기 - Java (0) | 2025.07.28 |
|---|---|
| [Programmers] PCCP 기출문제 1번 - 동영상 재생기 - Java (0) | 2025.07.27 |
| [Programmers] 최소직사각형 - Java (0) | 2025.07.25 |
| [Programmers] 폰켓몬 - Java (0) | 2025.07.24 |
| [Programmers] 비밀 코드 해독 - Java (0) | 2025.07.24 |