본문 바로가기

TIL(Today I Learned)

99클럽 코테 스터디 15일차 TIL + 백준25325 (학생 인기도 측정, java)

반응형

오늘의 학습 키워드

  • 정렬
  • 해시 맵

문제 탐색하기

문제

 

문제 풀이 설계하기

해시 맵을 사용해서 학생의 인기도를 getOrDefault 메소드를 통해서 인기도를 맵에 저장하고 

인기도를 내림차순으로 정렬한 뒤 인기도가 같은 학생들은 이름으로 정렬해서 출력하면 됩니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        HashMap<String, Integer> popular = new HashMap<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        while(st.hasMoreTokens()){
            popular.put(st.nextToken(), 0);
        }

        for(int i=0; i<n; i++){
            st = new StringTokenizer(br.readLine());

            while(st.hasMoreTokens()){
                String str = st.nextToken();
                popular.put(str, popular.getOrDefault(str, 0)+1);
            }
        }

        ArrayList<String> keySet = new ArrayList<>(popular.keySet());
        keySet.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int a = Integer.compare(popular.get(o2), popular.get(o1));
                if(a == 0){
                    return o1.compareTo(o2);
                }
                return a;
            }
        });

        for(String key : keySet){
            System.out.println(key + " " + popular.get(key));
        }
    }
}

 

오늘의 회고

해시 맵과 정렬에 대해 좀 더 알 수 있었습니다.
반응형