어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다.
이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.
다음과 같은 수 분포가 있으면,
10, 8, 7, 2, 2, 4, 8, 8, 8, 9, 5, 5, 3
최빈수는 8이 된다.
최빈수를 출력하는 프로그램을 작성하여라 (단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라).
[제약 사항]
학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.
[출력]
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.
0 <= 점수 <= 100이므로 0부터 100까지 수를 넣을 크기가 101인 int 배열 score을 선언한다. for문을 이용해서 학생들의 점수를 받을때마다 그 점수에 대응하는 인덱스에 ++를 해준다.for문을 이용하여 0부터 100까지 가장 큰 값을 가지는 인덱스를 선택하면 가장 많이 받은 점수를 알 수 있다. 이때, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라고 하였는데 0부터 100까지 순서대로 for문을 돌리기 때문에 자동으로 가장 큰 점수가 출력된다.import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int TC = sc.nextInt();
int score[] = new int[101];
int mostInt = 0;
for (int i = 0; i < 1000; i++) {
int newInt = sc.nextInt();
score[newInt]++;
}
int max = 0;
for (int i = 0; i < 101; i++) {
if (score[i] >= max) {
max = score[i];
mostInt = i;
}
}
System.out.println("#" + TC + " " + mostInt);
}
}
}