백준 베스트셀러

KIMYEONGJUN·2024년 12월 15일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

첫째 줄에 가장 많이 팔린 책의 제목을 출력한다.
만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 입력받는다.
keyList는 가장 많이 팔린 책 제목을 저장하기 위한 리스트이다.
N은 오늘 하루 동안 팔린 책의 개수를 의미하며, 첫 번째 줄에서 입력받는다.
map은 책 제목과 그 판매 수를 저장하기 위한 해시맵이다.
책 제목 입력 및 판매 수 증가:
for 루프를 통해 N개의 책 제목을 입력받는다.
map.put(name, map.getOrDefault(name, 0) + 1)는 책 제목이 이미 존재하면 판매 수를 1 증가시키고, 존재하지 않으면 1로 초기화한다.
최대 판매 수 찾기:
max 변수를 사용하여 가장 많이 팔린 책의 판매 수를 저장한다.
map.keySet()을 통해 모든 책 제목을 순회하며 최대 판매 수를 찾는다.
최대 판매 수와 일치하는 책 제목 저장:
map.entrySet()을 통해 각 책 제목과 그 판매 수를 확인한다.
판매 수가 max와 일치하는 책 제목을 keyList에 추가해준다.
사전 순으로 정렬 및 결과 출력:
Collections.sort(keyList)를 사용하여 keyList를 사전 순으로 정렬한다.
keyList.get(0)을 통해 가장 앞서는 제목을 출력한다.

코드로 구현

package baekjoon.baekjoon_25;

import java.io.*;
import java.util.*;

// 백준 1302번 문제
public class Main868 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        List<String> keyList = new ArrayList<>();
        int N = Integer.parseInt(br.readLine()); // 오늘 팔린 책의 개수 입력
        HashMap<String, Integer> map = new HashMap<>();

        for(int i = 0; i < N; i++) {
            String name = br.readLine(); // 책 제목 입력
            map.put(name, map.getOrDefault(name, 0) + 1); // 판매 수 증가
        }

        int max = 0;
        // 최대 판매 수 찾기
        for(String a : map.keySet()) {
            max = Math.max(max, map.get(a));
        }

        // 최대 판매 수와 일치하는 책 제목 저장
        for(Map.Entry<String, Integer> entry : map.entrySet()) {
            if(entry.getValue().equals(max)) {
                keyList.add(entry.getKey());
            }
        }

        // 사전 순으로 정렬
        Collections.sort(keyList);
        System.out.println(keyList.get(0)); // 결과 출력
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글