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