import java.util.*;
class Solution {
public int solution(int[] array) {
// 배열의 원소를 오름차순으로 정렬
Arrays.sort(array);
int maxFreq = 0; // 최대 빈도수
int mode = -1; // 최빈값
int count = 1; // 현재 원소의 빈도수
int prev = array[0]; // 이전 원소
for (int i = 1; i < array.length; i++) {
if (array[i] == prev) { // 현재 원소와 이전 원소가 같을 경우
count++; // 빈도수 증가
} else { // 현재 원소와 이전 원소가 다를 경우
if (count > maxFreq) { // 이전 원소의 빈도수가 최대 빈도수보다 큰 경우
maxFreq = count;
mode = prev;
} else if (count == maxFreq) { // 이전 원소의 빈도수가 최대 빈도수와 같은 경우
mode = -1;
}
prev = array[i]; // 이전 원소를 현재 원소로 업데이트
count = 1; // 빈도수 초기화
}
}
// 마지막 원소 처리
if (count > maxFreq) {
mode = prev;
} else if (count == maxFreq) {
mode = -1;
}
return mode;
}
}
코드분석
int maxFreq = 0; // 최대 빈도수를 저장할 변수
int mode = -1; // 최빈값을 저장할 변수, 최초에는 -1로 초기화합니다.
int count = 1; // 현재 원소의 빈도수를 저장할 변수입니다. 최초에는 1로 초기화합니다.
int prev = array[0]; // 이전 원소를 저장할 변수입니다. 최초에는 배열의 첫 번째 원소로 초기화합니다.
// 배열의 두 번째 원소부터 끝까지 반복하면서 최빈값을 찾습니다.
for (int i = 1; i < array.length; i++) {
if (array[i] == prev) { // 현재 원소와 이전 원소가 같을 경우
count++; // 빈도수를 증가시킵니다.
} else { // 현재 원소와 이전 원소가 다를 경우
if (count > maxFreq) { // 이전 원소의 빈도수가 최대 빈도수보다 큰 경우
maxFreq = count; // 최대 빈도수를 업데이트합니다.
mode = prev; // 최빈값을 업데이트합니다.
} else if (count == maxFreq) { // 이전 원소의 빈도수가 최대 빈도수와 같은 경우
mode = -1; // 최빈값을 -1로 업데이트합니다.
}
prev = array[i]; // 이전 원소를 현재 원소로 업데이트합니다.
count = 1; // 빈도수를 1로 초기화합니다.
}
}
// 배열의 마지막 원소를 처리합니다.
if (count > maxFreq) {
mode = prev;
} else if (count == maxFreq) {
mode = -1;
}
return mode; // 최빈값을 반환합니다.
}
'코딩테스트 예제' 카테고리의 다른 글
가벼운 코딩 테스트 (0) | 2023.04.15 |
---|---|
짝수는 싫어요 (0) | 2023.04.13 |
프로그래머스 중앙값 구하기 (0) | 2023.04.10 |
프로그래머스 배열 두 배 만들기 (0) | 2023.03.21 |
프로그래머스 분수의 덧셈 (0) | 2023.03.21 |