이 문제에서 제일 중요한 것은 최빈값을 구하는 로직이 아닐까 싶다.

음.. 최빈값은 어떻게 구하지?

int maxFreq = 0;
for (int freq : countArr) {
    if (freq > maxFreq) maxFreq = freq;
}

이 코드의 역할

: 배열 전체를 순회하면서 등장 횟수가 가장 큰 값을 maxFreq 에 저장하는 코드

최빈 숫자를 찾는 게 아니라 최빈 횟수를 구하는 것.

최빈값 구하는 코드

int[] countArr = new int[8001]; // -4000 ~ 4000 → 8001 크기

// 카운팅
for (int i = 0; i < N; i++) {
    countArr[arrays[i] + 4000]++; // 인덱스 보정
}

// 최대 빈도 찾기
int maxFreq = 0;
for (int freq : countArr) {
    if (freq > maxFreq) maxFreq = freq;
}

// 최대 빈도 가진 값들 수집
List<Integer> modeList = new ArrayList<>();
for (int i = 0; i < countArr.length; i++) {
    if (countArr[i] == maxFreq) {
        modeList.add(i - 4000); // 다시 원래 값으로 보정
    }
}

// 최빈값 결정
int mode;
if (modeList.size() == 1) {
    mode = modeList.get(0);
} else {
    Collections.sort(modeList);
    mode = modeList.get(1); // 두 번째로 작은 값 출력
}

map으로도 구할 수 있다. 근데 이 문제에서는 조건에 4000이하라는 것이 있으므로 위 코드처럼 푸는 게 더 좋다.

Q) sort 시 Arrays.sort( ) 가 있고 Collections.sort ( )가 있는데 두개를 각각 어느 상황에 사용하는지?

✅ 1. Collections.sort(list)


✅ 2. Arrays.sort(array)