본문 바로가기

Algorithm/Baekjoon

[백준_JAVA_알고리즘] 1302 베스트셀러 #해시

HashMap<String, Integer>을 이용해서 문제를 해결할 수 있습니다.

String에 책 제목을 넣고 Integer에 책의 개수를 누적합니다.

그 다음, max값에 가장 많이 팔린 책의 개수를 저장합니다.

그리고 answer에 처음으로 발견하고 가장 많이 팔린 책을 저장합니다.

또는 compareTo를 이용하여 현재 책(key)이 저장된 답(answer)보다 사전순으로 앞서는지 확인합니다.

compareTo 비교하기
음수: key < answer
양수: key > answer
0: key == answer

 

따라서 빈도 수가 가장 높으면서, 사전순으로 가장 앞선 책 제목을 찾아낼 수 있습니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        HashMap<String, Integer> hashMap = new HashMap<>();
        int max = 0;
        String answer = "";

        int N = Integer.parseInt(bufferedReader.readLine());
        for(int i = 0; i < N; i++){
            StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
            String title = stringTokenizer.nextToken();
            hashMap.put(title, hashMap.getOrDefault(title, 0) + 1);
            max = Math.max(max, hashMap.get(title));
        }

        for(String key: hashMap.keySet()){
            if(hashMap.get(key) == max){
                if(answer.equals("") || key.compareTo(answer) < 0){
                    answer = key;
                }
            }
        }
        System.out.println(answer);
    }
}

 

.

.

.

 

문제는 아래에서 확인할 수 있습니다.
https://www.acmicpc.net/problem/1302