본문 바로가기

알고리즘(백준 등) 공부/백준(자바)

백준 1302번: 베스트셀러

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

n개의 팔린 책들의 제목이 주어질 때, 가장 많이 팔린 책의 제목을 출력하는 문제이다. 가장 많이 팔린 책의 갯수가 같은게 여러개라면 사전순으로 앞에 있는 책의 제목을 출력한다.

 

책의 갯수를 세기 위해 Map을 사용하였다.

Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
    map.merge(br.readLine(), 1, Integer::sum);
}

 

 

이후, 커스텀 클래스를 통해 책 각각의 정보를 저장하였으며, 크기를 정렬하기 위해 우선순위 큐를 사용하였다. 우선순위 큐에 넣은 후, 해당하는 하나의 요소만 꺼내면 된다.

Queue<Book> pq = new PriorityQueue<>(new Comparator<Book>() {
    @Override
    public int compare(Book o1, Book o2) {
        if (o1.count == o2.count) {
            return o1.title.compareTo(o2.title);
        }
        return o2.count - o1.count;
    }
});
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    pq.add(new Book(entry.getKey(), entry.getValue()));
}
System.out.print(pq.remove().title);

 

static class Book {
    
    String title;
    int count;
    
    public Book(String title, int count) {
        this.title = title;
        this.count = count;
    }
}

 

 

최종 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;

public class 베스트셀러1302 {
    
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            map.merge(br.readLine(), 1, Integer::sum);
        }
        Queue<Book> pq = new PriorityQueue<>(new Comparator<Book>() {
            @Override
            public int compare(Book o1, Book o2) {
                if (o1.count == o2.count) {
                    return o1.title.compareTo(o2.title);
                }
                return o2.count - o1.count;
            }
        });
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            pq.add(new Book(entry.getKey(), entry.getValue()));
        }
        System.out.print(pq.remove().title);
    }
    
    static class Book {
        
        String title;
        int count;
        
        public Book(String title, int count) {
            this.title = title;
            this.count = count;
        }
    }
}

'알고리즘(백준 등) 공부 > 백준(자바)' 카테고리의 다른 글

백준 1308번: D-Day  (0) 2026.03.08
백준 1304번: 지역  (0) 2026.03.07
백준 1301번: 비즈 공예  (0) 2026.03.04
백준 1300번: K번째 수  (0) 2026.03.03
백준 1291번: 이면수와 임현수  (0) 2026.03.02