Mode Algorithm - 최빈값

bada·2024년 3월 29일

Algorithm

목록 보기
1/4
post-thumbnail

최빈값 알고리즘(Mode Algorithm)이란?

점수 인덱스의 개수(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);
    }
}

프로그래머스 <최빈값 구하기> 자바 Lv.0

프로그래머스 코딩테스트 입문문제 중 최빈값 구하기가 있다.
해당 문제에는 최빈값이 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;
   }
}
profile
하루 세번 목 당기기

0개의 댓글