ALGORITHM

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

연듀 2022. 6. 18. 14:28

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

 

1302번: 베스트셀러

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

www.acmicpc.net

 

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));
       int n = Integer.parseInt(br.readLine());

       Map<String, Integer> map = new HashMap<>(); // book, count
       int max = 0;
       for(int i=0; i<n; i++){
           String book = br.readLine();
           if(!map.containsKey(book)) map.put(book, 1); // map에 책이 포함되어있지 않다면 1로
           else map.put(book, map.get(book) + 1); // 포함되어 있다면 1증가
           max = Math.max(max, map.get(book)); // 최댓값 갱신
       }

       List<String> list = new ArrayList<>();
        for(Map.Entry<String, Integer> entry : map.entrySet()){
            if(entry.getValue() == max) list.add(entry.getKey()); // 빈도수 가장 높은 책들 리스트에 추가
        }
       Collections.sort(list); // 사전 순으로 정렬 
        System.out.print(list.get(0));
    }
}

 

 

책 이름과 책의 갯수를 저장하기 위해 HashMap을 이용하였다.

 

entrySet()을 사용해 전체 map을 돌며 개수가 가장 많은 책 이름을 리스트에 추가하고,

Collections.sort를 이용해 사전 순으로 정렬한 후 가장 첫번째 책을 출력한다.