1. 내 풀이
미리 정렬을 해놓음으로서 탐색을 좀 더 용이하게 만들었다.
import java.util.Arrays;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2];
Arrays.sort(lottos);
Arrays.sort(win_nums);
int correctLotto = 0;
int zeroCount = 0;
for(int i = 0, j = 0; i < lottos.length && j < lottos.length; i++){
if(lottos[i] == 0){
zeroCount++; continue;
}
if(win_nums[j] == lottos[i]) {
correctLotto++; j++;
}
else if(win_nums[j] < lottos[i]){
i--;
j++;
}
}
answer[0] = correctLotto + zeroCount;
answer[1] = correctLotto;
answer[0] = switch(answer[0]) {
case 6 -> 1;
case 5 -> 2;
case 4 -> 3;
case 3 -> 4;
case 2 -> 5;
default -> 6;
};
answer[1] = switch(answer[1]) {
case 6 -> 1;
case 5 -> 2;
case 4 -> 3;
case 3 -> 4;
case 2 -> 5;
default -> 6;
};
return answer;
}
}
2. 다른 분 풀이
hashMap을 이용했다. 중복값이 없다는 점이 있다.
순위를 구하기 위해 반전을 시켜놓았다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
int zeroCount = 0;
for(int lotto : lottos) {
if(lotto == 0) {
zeroCount++;
continue;
}
map.put(lotto, true);
}
int sameCount = 0;
for(int winNum : win_nums) {
if(map.containsKey(winNum)) sameCount++;
}
int maxRank = 7 - (sameCount + zeroCount);
int minRank = 7 - sameCount;
if(maxRank > 6) maxRank = 6;
if(minRank > 6) minRank = 6;
return new int[] {maxRank, minRank};
}
}
'코딩테스트 > Programmers' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (0) | 2025.03.13 |
---|---|
[프로그래머스] 둘만의 암호 (0) | 2025.03.13 |
[프로그래머스] 다트 게임 (0) | 2025.03.05 |
[프로그래머스] 옹알이(2) (0) | 2025.03.05 |
[프로그래머스] 실패율 (0) | 2025.03.05 |