●문제 출처
●정리(요약)
최빈수(가장 여러 번 나타나는 값)
//단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라
//학생의 수는 1000명
●코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
class Solution
{
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int i = 0; i<T;i++) {
String num = br.readLine();
Map<Integer, Integer> cnt = new HashMap<Integer, Integer>();
int a = 0;
st = new StringTokenizer(br.readLine()," ");
for(int j=0; j<1000; j++) {
a = Integer.parseInt(st.nextToken());
if(cnt.containsKey(a)) {
cnt.put(a, cnt.get(a)+1);
}else{
cnt.put(a, 1);
}
}
List<Integer> list = new ArrayList<Integer>(cnt.keySet());
Collections.sort(list);
int maxValue = Collections.max(cnt.values());
int result=-1;
for(int Key : list) {
if(cnt.get(Key)==maxValue) {
result = Key;
}
}
sb.append("#").append(num).append(" ").append(result).append("\n");
}
System.out.println(sb.toString());
}
}
●느낀점(+얻은 점)
list를 큰 순으로 정렬하여 제일 카운트 많이된 값을 큰 순으로 찾을 수 있었다.
hashMap의 merge() 함수를 통해 카운트를 늘릴 수 있다.
cnt.merge(score, 1, Integer::sum);
// sum은 Java에서 제공하는 Integer 클래스의 메서드 참조
●그외 얻은 것
Collections.max(hashMap.value());
Collections.max(hashMap.keySet());
key 값 기준 정렬
List<String> keySet = new ArrayList<>(map.keySet());
Collections.sort(KeySet)
Value 값 기준 정렬
List<String> keySet = new ArrayList<>(map.keySet());
Keyset.sort(new Comparator<String>(){
@Override
public int compare(String o1 , String o2){
return map.get(o1).compareTo(map.get(o2));
}