알고리즘
[백준] 1302번 : 베스트셀러 - JAVA
DoosanBaek
2024. 11. 24. 10:47
문제 분석 :
- 주어진 책 제목에서 제일 많이 팔린 책 찾기. 만약 제일 많이 팔린 책이 여러개라면 사전 순으로 앞서는 제목을 출력.
제약 조건 :
- 책 제목의 개수 : 최대 1000개의 제목
- 책 제목의 길이 : 각 책 제목의 길이 최대 50자
- 책 제목 : 알파벳 소문자
의사 결정 :
1. 책 제목이 몇 번 팔렸는지 계산하기 위해 책 제목의 빈도 저장 -> HashMap 사용 (키는 책 제목, 값은 해당 책 제목의 판매 횟수)
2. 제일 많이 팔린 책을 찾을 때, 빈도수 내림차순으로, 빈도수가 같으면 사전 순으로 정렬하여 제일 많이 팔린 책을 선택
3. 결과 출력
내 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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());
// 책 제목 저장할 리스트
List<String> books = new ArrayList<>();
// 책 제목을 입력 받음
for (int i = 0; i < N; i++) {
books.add(br.readLine());
}
// 책 제목의 빈도수 계산을 위한 HashMap
Map<String, Integer> bookCount = new HashMap<>();
// 책 제목 빈도수 계산
for (String book : books) {
bookCount.put(book, bookCount.getOrDefault(book, 0) + 1);
}
// 가장 많이 팔린 책 찾기
String mostSoldBook = null;
int maxCount = 0;
for (Map.Entry<String, Integer> entry : bookCount.entrySet()) {
String book = entry.getKey();
int count = entry.getValue();
// 최대 빈도수 업데이트, 동일한 빈도수일 경우 사전 순으로 비교
if (count > maxCount || count == maxCount && book.compareTo(mostSoldBook) < 0) {
mostSoldBook = book;
maxCount = count;
}
}
// 결과 출력
System.out.println(mostSoldBook);
}
}