더북(TheBook)

최빈값 알고리즘 사용하기

최빈값 알고리즘 공식은 점수 인덱스(0~n) 개수(COUNT)의 최댓값(MAX)입니다. 최빈값 알고리즘을 나타내는 공식을 코드로 구현해 보겠습니다. 다음 내용을 입력한 후 실행해 보세요.

최빈값 찾기: ModeAlgorithm.cs

using System;
using System.Linq;

class ModeAlgorithm
{
    static void Main()
    {
        //① 입력: 범위는 0부터 n점까지 점수만 들어온다고 가정
        int[] scores = { 1, 3, 4, 3, 5 }; //0~5만 들어온다고 가정
        int[] indexes = new int[5 + 1];   //0~5의 점수 인덱스 개수 저장
        int max = int.MinValue;           //MAX 알고리즘 적용
        int mode = 0;                     //최빈값이 담길 그릇

        //② 처리: Data -> Index -> Count -> Max -> Mode
        for (int i = 0; i < scores.Length; i++)
        {
            indexes[scores[i]]++;           //COUNT
        }
        for (int i = 0; i < indexes.Length; i++)
        {
            if (indexes[i] > max)
            {
                max = indexes[i];         //MAX
                mode = i;                 //MODE
            }
        }

        //③ 출력
        Console.WriteLine($"최빈값(문) : {mode} -> {max}번 나타남");
        var q = scores.GroupBy(v => v).OrderByDescending(g => g.Count()).First();
        int modeCount = q.Count();
        int frequency = q.Key;
        Console.WriteLine($"최빈값(식) : {frequency} -> {modeCount}번 나타남");
    }
}

실행 결과

최빈값(문) : 3 -> 2번 나타남
최빈값(식) : 3 -> 2번 나타남

최빈값 알고리즘은 점수를 인덱스로 다룬 후 개수 알고리즘과 최댓값 알고리즘을 적용하여 마지막으로 최빈값을 구하는 형태입니다. 다른 알고리즘과 달리 데이터 자체를 배열의 인덱스로 보고 계산하는 형태가 독특한 코드를 작성하기에 필수 학습 알고리즘으로 선택했습니다. 참고로 이 예제에서는 indexes 배열로 정수 배열을 사용했지만, Hashtable 클래스를 사용하면 좀 더 넓은 범위의 데이터에 대한 최빈값을 구할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.