점수 인덱스의 개수(count)의 최댓값(max) : count알고리즘과 max알고리즘의 복합.
✔︎ 값의 범위에 맞는 인덱스 배열을 만들고 해당 인덱스와 일치하는 숫자가 나오면 카운트한다.
✔︎ 그 중 카운트 수가 가장 높은 인덱스가 최빈값이 된다.
1. 빈 인덱스를 생성한다. 이때 인덱스는 0부터 시작이므로 인덱스의 길이는 주어진 값의 최대범위+1
2. 주어진 배열을 순회하여 인덱스의 요소를 카운트한다. 주어진 배열값 = 인덱스
3. 배열순회가 끝나면 인덱스순회를 통해 등장횟수가 가장 높은(최빈값) 인덱스의 요소를 찾는다.
4. 최소값으로 설정된 max라는 변수와 인덱스 요소값을 비교해 더 높은 숫자를 max에 초기화한다.
5. max가 초기화될 때 해당 인덱스의 요소를 최빈값으로 설정된 mode라는 변수에 초기화한다.
public class ModeAlgorithm {
public static void main(String[] args) {
//1. input
int[] scores = {10,5,2,30,4,10,2,10};
int[] indexes = new int[30+1]; // 배열 조건의 최대범위+1이어야 한다
int mode = 0; //최빈값
int max = indexes[0]; //최빈값 카운트수
//2. process
for(int i = 0; i < scores.length; i++) {
indexes[scores[i]]++;
}
for(int i = 0; i < indexes.length; i++) {
if(indexes[i] > max) {
max = indexes[i];
mode = i;
}
}
//3. output
System.out.println("scores 데이터의 최빈값: " + mode);
System.out.println("빈도수는: " + max);
}
}
프로그래머스 코딩테스트 입문문제 중 최빈값 구하기가 있다.
해당 문제에는 최빈값이 1개 이상일 경우 -1을 반환하도록 조건을 걸어 max비교부분에 추가된 코드가 있다.
최빈값이라는 단어도 생소한데에다가(이 정도도 몰랐다는 나 자신에게 충격먹음) 다른사람들의 풀이를 봐도 한 번에 이해가 안되어 여러번 풀었다.
class Solution {
public int solution(int[] array) {
int[] index = new int[1000+1];
int mode = 0;
int max = index[0];
for(int i = 0; i < array.length; i++) {
index[array[i]]++;
}
for(int i = 0; i < index.length; i++) {
if(index[i] > max) {
max = index[i];
mode = i;
} else if(index[i] == max) {
mode = -1;
}
}
return mode;
}
}