최빈값 알고리즘 사용하기
최빈값 알고리즘 공식은 점수 인덱스(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 클래스를 사용하면 좀 더 넓은 범위의 데이터에 대한 최빈값을 구할 수 있습니다.