알고리즘

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

DoosanBaek 2024. 11. 24. 10:47


문제 분석 :

- 주어진 책 제목에서 제일 많이 팔린 책 찾기. 만약 제일 많이 팔린 책이 여러개라면 사전 순으로 앞서는 제목을 출력.

제약 조건 :

- 책 제목의 개수 : 최대 1000개의 제목

- 책 제목의 길이 : 각 책 제목의 길이 최대 50자

- 책 제목 : 알파벳 소문자 

의사 결정 :

1. 책 제목이 몇 번 팔렸는지 계산하기 위해 책 제목의 빈도 저장 -> HashMap 사용 (키는 책 제목, 값은 해당 책 제목의 판매 횟수)

2. 제일 많이 팔린 책을 찾을 때, 빈도수 내림차순으로, 빈도수가 같으면 사전 순으로 정렬하여 제일 많이 팔린 책을 선택

3. 결과 출력

 

내 풀이

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

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());

        // 책 제목 저장할 리스트
        List<String> books = new ArrayList<>();

        // 책 제목을 입력 받음
        for (int i = 0; i < N; i++) {
            books.add(br.readLine());
        }

        // 책 제목의 빈도수 계산을 위한 HashMap
        Map<String, Integer> bookCount = new HashMap<>();

        // 책 제목 빈도수 계산
        for (String book : books) {
            bookCount.put(book, bookCount.getOrDefault(book, 0) + 1);
        }

        // 가장 많이 팔린 책 찾기
        String mostSoldBook = null;
        int maxCount = 0;

        for (Map.Entry<String, Integer> entry : bookCount.entrySet()) {
            String book = entry.getKey();
            int count = entry.getValue();

            // 최대 빈도수 업데이트, 동일한 빈도수일 경우 사전 순으로 비교
            if (count > maxCount || count == maxCount && book.compareTo(mostSoldBook) < 0) {
                mostSoldBook = book;
                maxCount = count;
            }
        }

        // 결과 출력
        System.out.println(mostSoldBook);
    }
}