📣 이것저것 시도해보다 실패해서
다른분들의 풀이를 두개정도 참고해 정리해보았다.
Q. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
0 < array의 길이 < 100
0 ≤ array의 원소 < 1000
1.
class Solution {
public int solution(int[] array) {
int[] count = new int[1000]; // 배열의 값 0~999
int maxCount = 0; // 가장 높은 빈도수 저장(최빈값)
int answer = -1; // 초기값 -1 (최빈값이 있는 경우 default)
// 배열 요소를 순회하며 빈도수를 카운트한다
// 배열의 각 원소를 num 변수에 하나씩 대입하는 루프
for (int num : array) {
count[num]++;
}
// ex) [1,2,3,2,1]
// count[1] = 2; (1이 두번 나옴) -- count 배열을 통한 빈도수 카운트
// 최빈값 구하기
// 즉 가장 높은 빈도수를 가진 값을 찾고, 이 값을 answer에 저장
for (int i = 0; i < count.length; i++) {
if (count[i] > maxCount) {
maxCount = count[i]; // 현재 가장 높은 빈도수 i
answer = i;
}
}
// 중복값 확인 = 여러 값이 동일한 최빈수를 가질 수 있으므로
// (문제에 제시된 사항임) ex [1,2,2,3,3]
for (int i = 0; i < count.length; i++) {
if (count[i] == maxCount && i != answer) {
// 중복된 최빈값이 존재하면 -1을 반환
return -1;
}
}
return answer;
}
}
2. HashMap 사용
import java.util.*;
class Solution {
public int solution(int[] array) {
int maxCount = 0;
int answer = 0;
// 빈도수를 저장할 map 생성
Map<Integer, Integer> map = new HashMap<>();
for(int number : array) {
// map에 현재 값 number에 대한 빈도수를 가져와서 1을 더한 값을 count에 저장
int count = map.getOrDefault(number, 0) + 1;
if(count > maxCount) {
// a.현재 값의 빈도수가 최대 빈도수보다 크면, 최대 빈도수와 최빈값 갱신
maxCount = count;
answer = number;
}
else if(count == maxCount) {
// b.현재 값의 빈도수가 최대 빈도수와 같으면 -1로 갱신
answer = -1;
}
// 현재 값을 빈도수와 함께 저장
map.put(number, count);
}
return answer;
}
}
🖇️getOrDefault
Java 8에서 추가된 Collection API 함수 JAVA 'map' 인터페이스의 일부
주어진 key에 대한 값을 반환하고 해당 키가 맵에 존재하지 않으면 기본 값을 반환한다.
getOrDefault((Object) key, V (DefaultValue))
Map<String, Integer> map = new HashMap<>();
map.put("apple",3);
map.put("banana",2);
int count1 = map.getOrDefault("apple", 0);
int count2 = map.getOrDefault("cherry", 0);
// count 1 == 3 출력
// count 2 == cherry는 map에 존재하지 않으므로 기본값 0 출력
🖇️int count 에서 +1을 한 이유
빈도수를 계산하기 위함. count 변수는 현재까지 해당 숫자의 개수를 나타내고,
+1을 더하여 업데이트 시키는 것
ex) [1, 2, 2, 3, 1]
이 배열을 순회하면서 각 숫자의 빈도수를 계산하려면
1. 1을 만났을 때, 1의 빈도수 = 1
2. 2를 만났을 때, 2의 빈도수 = 1
3. 다시 2를 만났을 때, 2의 빈도수 = 2 (+1)