본문 바로가기
코딩테스트 준비/백준

[백준] 1302번 - 베스트셀러 [Java]

by mwzz6 2025. 1. 20.

https://www.acmicpc.net/problem/1302

 

[백준] 1302번 - 베스트셀러 [Java]
[백준] 1302번 - 베스트셀러 [Java]
[백준] 1302번 - 베스트셀러 [Java]


1.  아이디어

 

HashMap을 활용해 책의 이름과 책의 개수를 다루면 간단하게 해결할 수 있다.


2. 문제풀이

 

key에 책의 이름, value에 책의 개수를 저장하는 HashMap을 만들었다. 이후 반복문으로 Entry를 꺼내서 value가 최대일 때 책의 이름을 얻는 방식으로 구현했고 value가 현재까지 찾은 최댓값과 동일하면 사전순으로 앞서는 것을 비교하기 위해 String의 compareTo 메서드를 활용했다.


3. 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) 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<>();
        for (int i = 0; i < N; i++) {
            String name = br.readLine();
            map.put(name, map.getOrDefault(name, 0) + 1);
        }

        String ans = "";
        int max = 0;
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            if (entry.getValue() > max) {
                max = entry.getValue();
                ans = entry.getKey();
            } else if (entry.getValue() == max && ans.compareTo(entry.getKey()) > 0) {
                ans = entry.getKey();
            }
        }

        bw.write(ans);
        bw.flush();
    }
}

4. 후기