본문 바로가기
Baekjoon

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

by jinjin98 2022. 9. 19.

 

 

처음 입력한 N 개의 숫자만큼 팔린 책의 이름을 입력하고 가장 많이 팔린 책을 출력하되

사전 순으로 가장 앞에 있는 책을 출력하는 문제입니다.

HashMap 을 이용해서 풀어보았습니다.

getOrdDefault () 메서드로 HashMap 에 넣으려는 책의 이름이 존재한다면 해당 책의 수를 반환해주고

존재하지 않는다면 기본값으로 설정한 0을 반환하도록 해서 수량을 1 더해줘 다시 넣어줍니다.

keySet() 로 모든 책의 이름을 갖고와 책 이름에 해당하는 수량을 비교해 가장 많이 팔린 책의 수를 확인합니다.

다시 keySet() 메서드를 사용해 책 이름으로 구성되어 있는 리스트를 만들고

리스트를 오름차순인 사전순으로 정렬합니다.

그리고 리스트에서 책 이름을 하나씩 꺼내 책 이름에 해당하는 책의 수가 가장 많이 팔린 책의 수와 동일하다면

출력한 후 break 를 걸어주어 종료합니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

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

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

        for(int i=0; i<N; i++) {

            String book = br.readLine();
            hashMap.put(book, hashMap.getOrDefault(book, 0) + 1);
        }

        int max = Integer.MIN_VALUE;

        for (String s : hashMap.keySet()) {

            max = Math.max(max, hashMap.get(s));
        }

        ar = new ArrayList<>(hashMap.keySet());

        Collections.sort(ar);

        for (String s : ar) {

            if(max == hashMap.get(s)) {

                System.out.println(s);
                break;
            }
        }
    }
}

댓글