1. 문제 링크
https://www.acmicpc.net/problem/1302
2. 문제

요약
- 오늘 하루 판매된 책의 제목들을 보고 가장 많이 팔린 책의 제목을 구합니다. 만약 여러 권이라면 사전 순으로 가장 앞에 있는 제목을 구합니다.
- 입력: 첫 번째 줄에는 하루 동안 팔린 책의 개수가 주어지고 두 번째 줄부터 책의 개수만큼 제목이 입력으로 들어옵니다.
- 출력: 가장 많이 팔린 책의 제목을 출력합니다.
3. 소스코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Main {
public String getBestSeller(ArrayList<String> book_list) {
Map<String, Integer> book_map = new HashMap<String, Integer>();
for(int i = 0; i < book_list.size(); i++) {
if(book_map.containsKey(book_list.get(i))) {
book_map.put(book_list.get(i), book_map.get(book_list.get(i)) + 1);
} else {
book_map.put(book_list.get(i), 0);
}
}
int max_num = 0;
for(String i : book_map.keySet()) {
if(max_num < book_map.get(i)) {
max_num = book_map.get(i);
}
}
ArrayList<String> bestSeller = new ArrayList<String>();
for(String i : book_map.keySet()) {
if(max_num == book_map.get(i)) {
bestSeller.add(i);
}
}
Collections.sort(bestSeller);
return bestSeller.get(0);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
ArrayList<String> book_list = new ArrayList<String>();
for(int i = 0; i < num; i++) {
book_list.add(br.readLine());
}
br.close();
Main m = new Main();
bw.write(m.getBestSeller(book_list) + "\n");
bw.flush();
bw.close();
}
}
4. 접근
- 주어진 제목들을 보고 각 제목마다 팔린 개수를 구한 후에 그 중에서 가장 많이 팔린 책의 제목을 출력합니다.
- 책의 제목을 key로, 팔린 개수를 value로 하여 HashMap을 만들고 HashMap에 이미 제목이 존재한다면 해당 제목의 value를 1 올리고 그렇지 않다면 value를 0으로 두고 HashMap에 추가합니다.
- 이렇게 팔린 개수를 구한 후에 가장 많이 팔린 개수를 구하고 해당 개수를 value로 갖는 key들을 찾아 ArrayList에 넣어줍니다.
- 가장 많이 팔린 책의 제목들이 들어가있는 ArrayList를 오름차순으로 정렬하여 ArrayList에서 가장 첫 번째에 있는 값을 출력합니다.