[Baekjoon] 1302번: 베스트셀러

2023. 4. 4. 17:08Computer Sciences/Problem Solve

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

 

1302번: 베스트셀러

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고

www.acmicpc.net

문제 설명

가장 많이 입력된 책을 출력한다. 가장 많이 입력된 횟수가 같을 경우 사전 순으로 출력한다.

풀이 방법

HashMap을 활용해서 해결했다. 간단한 문제이므로 바로 코드를 보자.

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<String, Integer> map = new HashMap<>();

        int N = Integer.parseInt(br.readLine());

        // 책 이름 입력받기
        while (N-- > 0) {
            String title = br.readLine();
            // 이미 책이 있으면 카운트 + 1, 없으면 1로 초기화
            if (map.containsKey(title)) {
                map.put(title, map.get(title) + 1);
            } else {
                map.put(title, 1);
            }
        }

        List<String> keyList = map.keySet().stream().collect(Collectors.toList());

        // 카운트에 대해 내림차순으로 정렬, 같으면 제목으로 사전순 정렬
        keyList.sort((title1, title2) -> {
            int result = map.get(title2).compareTo(map.get(title1));
            if (result != 0) {
                return result;
            } else {
                return title1.compareTo(title2);
            }
        });

        System.out.print(keyList.get(0));
    }
}