class Solution {
public int solution(int[] array) {
int answer = 0, maxCount = 0;
int[] sub_arr = new int[1001];
for(int i = 0; i < array.length; i++) {
sub_arr[array[i]]++;
}
for(int i = 0; i < sub_arr.length; i++) {
if(maxCount == sub_arr[i]) {
answer = -1;
}else if(maxCount < sub_arr[i]){
maxCount = sub_arr[i];
answer = i;
}
}
return answer;
}
}
길이가 1001인 배열을 만든 이유
문제에서 array
원소의 크기가 0부터 1000까지라고 해서 배열의 자리를 1001까지 만들었음
-> 인덱스는 0 ~ n-1까지이기 때문에
이렇게 만든 배열로 카운팅 배열을 사용해서 문제를 풀었다. 카운팅 배열은 따로 정리할 예정!
-> sub_arr[array[i]]++;
if문 보충 설명
maxCount보다 sub_arr[i]의 값이 크면 maxCount에 sub_arr[i] 값을 대입
for문으로 반복하면서 더 큰 숫자가 나올 경우 maxCount의 값도 더 큰 수로 바뀜
제일 숫자가 큰(제일 많이 나왔던(=최빈값)) sub_arr[i] 값이 최종 maxCount가 됨
sub_arr의 인덱스 번호와 실제 배열(array)의 원소 값이 같기 때문에 i값이 최빈값이 됨
➕ int[] array = {1,2};
와 같이 최빈값이 없는 경우
sub_arr[1]에 1 값이 들어가 있기 때문에 maxCount는 sub_arr[1]이 된다
for문으로 sub_arr[2]와 비교했을 때 sub_arr[2]의 값도 1이므로 true 조건을 만족하게 됨
따라서 -1 리턴