어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다.
이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.
다음과 같은 수 분포가 있으면,
10, 8, 7, 2, 2, 4, 8, 8, 8, 9, 5, 5, 3
최빈수는 8이 된다.
최빈수를 출력하는 프로그램을 작성하여라 (단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라).
[제약 사항]
학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.
[출력]
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.
0부터 100점까지의 배열을 하나 만든다
그리고 반복문을 통해 89점이면 배열의 89번 인덱스를 +1 해준다
이렇게 1,000명 학생의 빈도를 배열에 담는다
0번 인덱스는 사용하지 않으므로, 1번 인덱스부터 1,000번 인덱스까지 반복문을 통해
최빈수를 구할 수 있다(가장 배열값이 높은 인덱스가 최빈값)
여기서 Math.max 함수를 활용하여 더 높은 값을 max 변수에 담는다
그리고 동일한 값이 나올 경우 점수가 더 높은 것을 활용해야 하므로,
cnt 변수를 활용하여 max값과 배열의 i번 째 인덱스가 같은 경우 더 높은 수를 cnt함수에 담는다
이후 testcase의 숫자와 cnt 값을 출력한다
import java.util.Scanner;
public class _1204_최빈수_구하기 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int tc=1; tc<T+1; tc++) {
int[] arr = new int[101];
int testcase = sc.nextInt();
for(int i=0; i<1000; i++) {
arr[sc.nextInt()]++;
}
int max=0;
int cnt=0;
for(int i=1; i<arr.length; i++) {
max = Math.max(max, arr[i]);
if(max == arr[i]) {
cnt = Math.max(cnt, i);
}
}
System.out.printf("#%d %d\n", tc, cnt);
}
sc.close();
}
}
대한민국 자살률 OECD 1위, 행복지수 OECD 37개국 중 35위....
모든 것을 등수 매기는 이 사회 정녕 행복하십니까?
통계를 내서 사람을 급 나누고 등수 세우는 이런 코드....
그만해주세요...