알고리즘

백준 1302 베스트셀러

킨글 2024. 9. 16. 12:00

설명

  • 데이터를 어떻게 저장할까에 대한 고민이 있었다.
  • 처음에는 PriorityQueue를 사용해서 계속 재정렬하려고 했지만, 좋지 않은 방법인듯했다.
  • 그래서 Map을 사용해서 데이터를 저장하고 순회하면서 +1을 해주는 방식으로 데이터를 저장했다. 
  • 결국에 다시 한번 for문을 돌면서 마지막 topCnt인 이름을 찾아내는 방식으로 진행했는데,
    느릴줄 알았는데 다행히 100ms로 빠르게 속도가 나왔다.

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {

    // 1244
    public static void main(String[] args) throws IOException {
        process();
    }

    private static void process() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
        Map<String, Integer> map = new HashMap<>();
        int topCnt = 0;
        
        for (int i = 0; i < N; i++) {
            String input = br.readLine();
            int cnt = map.getOrDefault(input, 0) + 1;
            map.put(input, cnt);
            if(topCnt < cnt) {
                topCnt = cnt;
            }
        }

        List<String> result = new ArrayList<>();
        for(Map.Entry<String, Integer> entry : map.entrySet()) {
            if(entry.getValue() == topCnt) {
                result.add(entry.getKey());
            }
        }
        Collections.sort(result);
        
        bw.write(result.get(0));
        bw.flush();
        bw.close();
        br.close();
    }
}