반년 전에 풀었던 문제이고, 포스팅 했었다. >링크<
하지만 다시 풀려니 예전과 같이 복잡하게 푸는법밖에 떠오르지 않았다.
그래서 다른 사람의 풀이를 컨닝하고 내 풀이에 적용시켜보았다.
import java.util.*;
class Solution {
public int solution(int[] array) {
int answer = 0;
int max=0;
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<array.length;i++) {
map.put(array[i], map.getOrDefault(array[i],0)+1);
if (map.get(array[i]) > max) {
max=map.get(array[i]);
answer=array[i];
} else if(map.get(array[i]) == max) {
answer = -1;
}
}
return answer;
}
}
이전에는 이렇게 저렇게 복잡하게 풀이했지만,
이번에는 for 문 하나에서 끝낼 수 있게 풀었다.
우선 map을 사용하여 각각의 숫자를 카운팅하며
동시에 그 숫자가 최빈값인지 max로 확인한다. 만약 그 값이 최빈값이라면 answer에 그 값을 넣어놓는다.
최빈값이 2개 이상이라면 answer이 -1이 된다.
import java.util.*;
class Solution {
public int solution(int[] array) {
int maxCount = 0;
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
for(int number : array){
int count = map.getOrDefault(number, 0) + 1;
if(count > maxCount){
maxCount = count;
answer = number;
}
else if(count == maxCount){
answer = -1;
}
map.put(number, count);
}
return answer;
}
}
이분이 사용한 Map, getOrDefault(), 'for문 한번에 모두 해결하는 것'을 내 풀이에도 적용시켰다.
컨닝 이후라 그런지 내 풀이가 더 직관적으로 보인다.