SWEA 1204번 최빈수 구하기

Montag·2023년 2월 2일
1

문제풀이

목록 보기
1/10

1204번 최빈수 구하기

어느 고등학교에서 실시한 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();
		
	}

}
profile
안녕하세요

4개의 댓글

comment-user-thumbnail
2023년 2월 2일

대한민국 자살률 OECD 1위, 행복지수 OECD 37개국 중 35위....
모든 것을 등수 매기는 이 사회 정녕 행복하십니까?
통계를 내서 사람을 급 나누고 등수 세우는 이런 코드....
그만해주세요...

1개의 답글
comment-user-thumbnail
2023년 2월 15일

포스팅 안하세요?

답글 달기