앞으로 매일 꾸준히 코딩테스트를 진행하면서 단계를 높여가보자.
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
0 < array의 길이 < 100
0 ≤ array의 원소 < 1000

import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(int[] array) {
// 각 값이 나타난 횟수를 저장할 Map
Map<Integer, Integer> countMap = new HashMap<>();
// 배열을 돌면서 각 값이 나타난 횟수를 카운트
for(int num : array) {
// Map의 put 메서드로 값을 카운트
// 만약 해당 키(num)가 존재하지 않으면 기본값으로 0을 사용
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
int maxCount = 0; // 가장 많이 나타난 횟수
int answer = 0; // 최빈값
// Map을 돌면서 가장 많이 나타난 횟수와 값 찾기
for(Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
int num = entry.getKey();
int count = entry.getValue();
if(count > maxCount) {
// 가장 많이 나타난 횟수와 값 업데이트
maxCount = count;
answer = num;
} else if(count == maxCount) {
// 최빈값이 여러 개 일 경우, -1 반환
answer = -1;
}
}
return answer;
}
}
HashMap이란?
키-값 쌍의 집합을 저장하는 자료구조이다.
키를 기반으로 값을 검색하므로 빠른 검색 속도를 제공한다. 이를 활용하여 각 값이 나타난 횟수를 세는 데 사용한다.
HashMap을 사용하여 각 값의 출현 횟수를 저장하고, 그 중 가장 많이 나타난 값을 찾는다.
1) Map<Integer, Integer> countMap = new HashMap<>(); 각 값이 나타난 횟수를 저장할 Map 생성한다.
2) for문으로 배열을 돌면서 각 값이 나타난 횟수를 +1 카운트한다.
2-1) Map의 put 메서드로 값을 카운트한다.
2-2) Map의 getOrDefault 메서드로 찾는 키가 존재한다면 찾는 키의 값을 반환, 없다면 기본 값을 반환한다.
getOrDefault(Object key, V defaultValue)메서드
3) 가장 많이 나타난 횟수, 최빈값 초기화한다.
4) for문으로 Map을 돌면서 가장 많이 나타난 횟수와 해당 값 찾는다.
4-1) entrySet() 메서드는 Map의 모든 키-값 쌍을 포함하는 Set을 반환한다. 각 Map.Entry를 하나씩 가져와서 처리한다.
4-2) Entry는 Map의 각 항목을 나타내는 인터페이스이다. 각 항목은 키와 값으로 이루어진 쌍이며, 이를 나타내는 클래스가 Map.Entry이다.
5) 조건문으로 업데이트해준다.
6) 최빈값이 여러 개일 경우, -1 반환한다.
자료구조 공부가 부족해서 너무 어려운 문제였다. 코드를 뜯어보면서 공부를 다시 해봐야겠다.
chatGPT