PS/프로그래머스 입문 100제
[프로그래머스] LV.0 최빈값 구하기 - 자바 [89/100]
yaho!!
2024. 7. 5. 15:37
💬 문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
🚫 제한 사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
📢 입출력 예
👨🏫 입출력 예 설명
📃 제출 코드
import java.util.*;
class Solution {
public int solution(int[] array) {
int answer = 0;
Map<Integer, Integer> map = new HashMap();
for (int i : array) {
map.put(i, map.getOrDefault(i, 0) + 1);
}
int maxValue = Integer.MIN_VALUE;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (entry.getValue() > maxValue) {
maxValue = entry.getValue();
answer = entry.getKey();
} else if (entry.getValue() == maxValue) {
answer = -1;
}
}
return answer;
}
}
✏ 해결방법 & 배운점
Map에 빈도수 저장
- `array`의 각 요소를 순회하면서 `map`에 요소를 키로 저장하고 해당 요소의 빈도수를 값으로 저장하였습니다.
- `getOrDefault()` 메서드를 사용하여 키가 존재하는 경우 기존 값에 1을 더하고, 없는 경우 0에서 1을 더합니다.
최대 빈도수 찾기
- `map.entrySet()` 메서드를 사용하여 `map`의 모든 키-값 쌍을 순회합니다.
- 각 요소의 빈도수가 `maxValue` 보다 크다면 `maxValue`를 업데이트 하고 해당 요소의 키를 `answer`에 저장
- 만약 현재 요소의 빈도수가 maxValue와 같다면, answer를 -1로 설정하여 중복된 최대 빈도수를 처리합니다.