SWEA(SW Expert Academy) 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 D2

heesan·2024년 8월 31일

코딩테스트

목록 보기
19/40
post-thumbnail

●문제 출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE&problemTitle=1204&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

●정리(요약)

최빈수(가장 여러 번 나타나는 값)

//단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라
//학생의 수는 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));

}
profile
👩‍💻Backend Engineering

0개의 댓글