Algorithm

SWAE / 1204 / 최빈수 구하기

c3epmos 2020. 4. 28. 21:50

문제

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

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

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

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

최빈수는 8이 된다.

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

 

제약 사항

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

 

입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.

 

출력

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.

 

입출력 예

코드

import java.util.*;
public class freq_num {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
Map<Integer, Integer> map = new HashMap<>();
int n = sc.nextInt();
// 모든 학생의 점수를 확인
for(int i = 0 ; i < 1000 ; i++) {
int test = sc.nextInt();
// map을 이용해 빈도수를 체크
if(map.containsKey(test))
map.put(test, map.get(test) + 1);
else
map.put(test, 1);
}
// map의 key값을 list에 저장
List<Integer> keySetList = new ArrayList<>(map.keySet());
// 이 리스트를 재정의한 정렬 함수로 정렬
Collections.sort(keySetList, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// 만약 value가 같다면 key를 기준으로 내림차순
if(map.get(o2) == map.get(o1))
return o2.compareTo(o1);
// 같지 않다면 value로 정렬
return map.get(o2).compareTo(map.get(o1));
}
});
System.out.println("#"+ test_case+" "+keySetList.get(0));
}
}
}
view raw test.java hosted with ❤ by GitHub

 

느낀점

map과 정렬 override가 가능하다면 쉽게 해결할 수 있는 문제였다.

 

출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com

 

댓글수0