[SWEA] #1204 - 최빈수 구하기

2022. 2. 23. 12:56
728x90
반응형

※ 문제에 대한 저작권은 SW Expert Academy에 있습니다.

💡 출처


https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh#none 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

💡 문제


[설명]

어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다.

이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.

다음과 같은 수 분포가 있으면,

10, 8, 7, 2, 2, 4, 8, 8, 8, 9, 5, 5, 3

최빈수는 8이 된다.

최빈수를 출력하는 프로그램을 작성하여라 (단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라).

 

[제약 사항]

학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다.

 

💡 아이디어


보자마자 기수 정렬(= Counting Sort)이 떠올랐다.

 

점수는 최소 0점에서 최대 100점이기 때문에 0~100 인덱스를 가지는 배열을 만들었다.

 

그 후 1000명의 점수를 입력받아 각 점수에 해당하는 배열의 값을 1씩 증가시켰다.

 

최종적으로는 0~100인덱스를 가지는 배열을 처음부터 탐색하여 최댓값을 가지는 인덱스를 출력했다.

 

💡 소스코드


import java.io.FileInputStream;
import java.util.Arrays;
import java.util.Scanner;

/*최빈수 구하기*/
public class P_1204 {

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("input.txt"));
		Scanner sc = new Scanner(System.in);
		int T, Case;
		int[] array = new int[101];
		int max = 0, idx = 0;
		T = sc.nextInt();
		
		for (int test_case = 1; test_case <= T; test_case++) {
			Case = sc.nextInt();

			for (int i = 0; i < 1000; i++)
				array[sc.nextInt()]++;//array[]에 점수별 학생의 수 저장
			
			for (int j = 0; j < 101; j++)
				if (array[j] >= max && j >= idx) {//현재까지 점수 빈도와 비교 
					max = array[j];
					idx = j;
					//새롭게 지정
				}

			System.out.println("#" + Case + " " + idx);//최종 최빈수 출력
			max = idx = 0;//max, idx 값 초기화
			Arrays.fill(array, 0);//array[] 0으로 초기화
		}
	}
}

 

💡 결과


코드는 단순하지만 생각보다 메모리나 시간이 꽤 많이 들었다.

 

아마 Scanner의 사용과 Arrays.fill()의 영향인 거 같다..

 

새롭게 코드를 짠다면 BufferedReader를 사용하고, TestCase마다 배열을 새롭게 선언해주면 시간이 줄어들지 않을까 생각한다..!

728x90
반응형

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[SWEA] #1209 - Sum  (0) 2022.02.25
[SWEA] #1258 - 행렬찾기  (0) 2022.02.23
[SWEA] #1208 - Flatten  (0) 2022.02.23
[SWEA] #1257 - K번째 문자열  (0) 2022.02.23
[SWEA] #1206 - View  (0) 2022.02.23

BELATED ARTICLES

more