문제

풀이
import java.util.*;
class Solution {
public int solution(int[] array) {
HashMap<Integer, Integer> countMap = new HashMap<>();
int maxKey = -1;
int maxCount = 0;
for(int number : array){
countMap.put(number, countMap.getOrDefault(number, 0) + 1);
if(maxCount < countMap.get(number)){
maxKey = number;
maxCount = countMap.get(number);
}
else if(maxCount==countMap.get(number)){
maxKey = -1;
}
}
return maxKey;
}
}
메모
여기서 문제의 포인트는 HashMap이라고 생각한다.
array의 원소가 1000까지이기 때문에
new int[1000]으로 배열을 만들어서 각 원소의 값을 인덱스로 저장해도 되지만,
array에 포함되지 않은 수도 배열에 있기 때문에 불필요하게 저장공간을 차지할 수 있다.
하지만, HashMap의 경우에는 array에 포함된 값만 저장하기 때문에
메모리를 효율적으로 사용할 수 있다.
물론 지금은 1000으로 범위가 좁아서 큰 차이는 없지만,
값의 범위가 커질 수록 많은 차이를 유발할 수 있다.
HashMap은 {Key, Value}값으로 저장을 하고
같은 Key를 가진 값을 넣으면 최신의 값으로 업데이트 된다.
따라서 해당 문제에서는
Key를 숫자 값으로, Value를 Count로 하여
배열을 돌면서 나온 숫자의 Value값을 하나씩 더하는 형식으로 풀이하였다.
참고로,
HashMap에서 값을 가져오는 것은 get(Key값)
HashMap에서 값을 넣는 것은 put(Key값, Value값)
getOrDefault(Key값, Default값)은 Key에 해당하는 Value가 있다는 Value를 반환하고
없다면 Default값을 반환한다.
'JAVA > 코딩테스트 문제풀이' 카테고리의 다른 글
[프로그래머스 - Java] Lv.0 중앙값 구하기 (0) | 2025.03.17 |
---|---|
[프로그래머스 - Java] Lv.0 나머지 구하기 (0) | 2025.03.17 |
[프로그래머스 - Java] Lv.0 배열 두배 만들기 (0) | 2025.03.13 |
[프로그래머스 - Java] Lv.0 분수의 덧셈 (0) | 2025.03.13 |
[프로그래머스 - Java] Lv.0 숫자 비교하기 (0) | 2025.03.13 |