https://www.acmicpc.net/problem/1302
1302번: 베스트셀러
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고
www.acmicpc.net
문제
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); sc.nextLine();
HashMap<String,Integer> map = new HashMap<>();
for(int i=0;i<n;i++) {
String s = sc.nextLine();
if(map.containsKey(s)){
map.put(s,map.get(s)+1);
}else {
map.put(s,1);
}
}
int max=0;
String maxStr="zzz";
for(String s : map.keySet()) {
if(map.get(s)>max) {
max=map.get(s);
maxStr=s;
}
else if(map.get(s)==max) {
if(s.compareTo(maxStr)<0) {
maxStr=s;
}
}
}
System.out.println(maxStr);
}
}
해결방법
HashMap을 사용하여 해당 문자열(키)의 값을 높여주는 식으로 구현하였다.
가장 많이 팔린 책을 구하기위해 keySet()으로 HashMap의 값이 가장 높은 값을 구하였다. 만약 팔린 수가 동일한 책이 있다면 사전순으로 앞서는 제목을 출력해야하므로 현재 책의 제목과 maxStr을 compareTo()로 비교하여 해결하였다.
헷갈렸던 이론
a.compareTo(b) - 정수 비교
=> a가 더 작으면 -1 반환
=> a와 b가 같으면 0 반환
=> a가 더 크면 1 반환
str1.compareTo(str2) - 문자열 비교
=> str1이 사전순으로 앞서면 음수 반환
=> str1과 str2이 같으면 0 반환
=> str1이 사전순으로 뒤에 있으면 양수 반환
'알고리즘 > 백준' 카테고리의 다른 글
2776번 : 암기왕 (0) | 2022.08.21 |
---|---|
2357번 : 최솟값과 최댓값 (0) | 2022.08.18 |
14425번 : 문자열 집합 (0) | 2022.08.17 |
17413번 : 단어 뒤집기2 (0) | 2022.08.16 |
19941번 : 햄버거 분배 (0) | 2022.08.16 |