728x90
반응형
[문제 링크]
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
📍 코드
import java.util.*;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
Set<Integer> winSet = new HashSet<>();
for (int w : win_nums) {
winSet.add(w);
}
int zeroCnt = 0; // 0의 개수
int matchCnt = 0; // 일치 개수
for (int n : lottos) {
if (n == 0) {
zeroCnt++;
} else if (winSet.contains(n)) {
matchCnt++;
}
}
int max = getRank(matchCnt + zeroCnt);
int min = getRank(matchCnt);
return new int[]{max, min};
}
private int getRank(int cnt) {
switch (cnt) {
case 6: return 1;
case 5: return 2;
case 4: return 3;
case 3: return 4;
case 2: return 5;
default: return 6;
}
}
}
💡 접근법
- 알 수 없는 수 제외하고 맞는 수 ➡️ 최소
- 알 수 없는 수 포함하고 맞는 수 ➡️ 최대
set()활용set()에 로또 번호를 담는다.- 내가 선택한 로또 번호의 알 수 없는 수(0)를 카운트한다. (zeroCnt)
- 내가 선택한 로또 번호가
set()에 담긴 번호에 포함되는지 확인한다. (contains()) - 포함하면 카운트 한다. (matchCnt)
getRank()메서드를 생성하여 맞은 수에 따른 등수를 반환한다.- 이후 max와 min 값을 반환하면 답이다.
case문을 활용하고 코드가 길어져서
효율성 테스트에서 통과되지 않을까 걱정했지만,
다행히 효율성 테스트는 없었다고 한다..😂
하지만, 생각해보면 입력 값의 데이터 크기가 고정된 문제이므로
시간 복잡도는 O(1) 정도이다.
그러므로 꽤 괜찮은 것 같다 !
728x90
반응형
