백준
백준 1302: 베스트셀러(java)
unhyepnhj
2024. 8. 7. 18:28
문제
풀이
제목과 해당하는 판매 횟수를 대응시켜야 하므로 HashMap<String, Integer>를 사용하였으며, 풀이 과정은 크게 아래 3단계와 같다.
- 제목을 입력받아 처음 등장하는 제목일 경우 <제목, 1>을 put하고 이전에 등장한 적 있는 제목일 경우 <제목, get(제목)+1>을 put
- 판매 횟수가 가장 많은 책들을 별도의 리스트에 저장
- 2번의 리스트를 알파벳 순으로 정렬하여 첫 번째 요소를 출력
int max=0;
for(int i=0; i<N; i++) {
String str=br.readLine();
hm.put(str, hm.getOrDefault(str, 0)+1); //hm은 해시맵 객체
max=Math.max(max, hm.get(str));
}
getOrDefault() 메소드를 이용해 해시맵에 str이 존재할 경우 str에 대응하는 value를 호출하여 1을 더하고, 없을 경우 default값인 0을 호출하여 1을 더한다(=1 삽입).
Math.max() 메소드를 이용해 해시맵 내 value들을 그때그때 비교하여 최대 판매 횟수를 max에 저장하고,
List<String> maxKeys=new ArrayList<>();
for(Map.Entry<String, Integer> entry : hm.entrySet()) {
if(entry.getValue()==max)
maxKeys.add(entry.getKey());
}
value==max인 요소들을 maxKey 리스트에 따로 저장한다.
Map.Entry를 사용하여 맵에 저장된 key-value 쌍을 하나의 객체로 저장할 수 있으며, getValue() 메소드를 이용해 value에 접근할 수 있다(getKey()도 마찬가지)
Collections.sort(maxKeys);
이후 Collections.sort() 메소드를 이용해 maxKey 리스트의 요소들을 오름차순으로 정렬한다.
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
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));
HashMap<String, Integer> hm=new HashMap<>();
int N=Integer.parseInt(br.readLine());
int max=0;
for(int i=0; i<N; i++) {
String str=br.readLine();
hm.put(str, hm.getOrDefault(str, 0)+1);
max=Math.max(max, hm.get(str));
}
List<String> maxKeys=new ArrayList<>();
for(Map.Entry<String, Integer> entry : hm.entrySet()) {
if(entry.getValue()==max)
maxKeys.add(entry.getKey());
}
Collections.sort(maxKeys);
System.out.println(maxKeys.get(0));
}
}