풀이방법
사용된 것:
정렬
HashMap
TreeSet
2022.06.12
먼저 HashMap<String, Integer> hm 을 이용해 각 책들의 판매권수를 센다.
입력으로 들어오는 책 제목들을 순서대로 하나씩 읽으면서,
처음으로 입력된 책 제목이라면 hm에 (책 제목, 1) 을 추가한다.
이전에 입력된 적 있는 책 제목이라면 hm에 (책 제목, hm.get(책 제목)+1) 을 추가한다.
이렇게 하면 마지막에는 각 책 제목에 대하여 (책 제목, 팔린 권수)가 저장되어있게 된다.
그 다음엔 TreeSet<String> answer를 이용하여 정답을 구한다.
int형 변수 max를 선언하고 1보다 작은 수로 초기화한다.
hm의 KeySet의 각 요소 str에 대하여,
hm.get(str)이 max와 같을 경우, answer에 str을 넣는다.
hm.get(str)이 max보다 클 경우, answer을 완전히 비운 뒤 str을 answer에 넣는다.
TreeSet은 자동으로 요소들을 오름차순 정렬하므로 가장 첫번째 요소 즉 answer.first()가 사전순으로 가장 앞이다.
따라서 answer.first()가 정답이다. 이를 화면에 출력한다.
코드
Java(2022.06.12)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//입력값들을 읽어오며 각 책이 팔린 권수를 세기
int n = Integer.parseInt(br.readLine());
HashMap<String, Integer> hm = new HashMap<String, Integer>();
for(int i=0; i<n; i++) {
String input = br.readLine();
if(hm.containsKey(input)) hm.put(input, hm.get(input)+1);
else hm.put(input, 1);
}
//정답 구하기
int max = -1;
TreeSet<String> answer = new TreeSet<String>();
for(String str: hm.keySet()) {
if(hm.get(str)>max) {
max = hm.get(str);
answer = new TreeSet<String>();
answer.add(str);
}
else if(hm.get(str) == max) answer.add(str);
}
//정답 출력
System.out.print(answer.first());
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#2217 : 로프 (0) | 2022.06.12 |
---|---|
#2309 : 일곱 난쟁이 (0) | 2022.06.12 |
#1059 : 좋은 구간 (0) | 2022.06.12 |
#3187 : 양치기 꿍 (0) | 2022.06.09 |
#2370 : 시장 선거 포스터 (0) | 2022.06.08 |