https://www.acmicpc.net/problem/1302
1302번: 베스트셀러
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고
www.acmicpc.net
백준 1302번 베스트셀러 문제 링크입니다.
핵심
가장 많이 나온 이름을 구하는 것이다. 이는 Hash를 사용하여 풀 수 있다. value가 같은 값일 때는 사전 순으로 정렬을 해야 한다.
정답 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<String> keyList = new ArrayList<>();
int N = sc.nextInt();
HashMap<String ,Integer> map =new HashMap<>();
for (int i=0;i<N; i++){
String name = sc.next();
if (!map.containsKey(name)) {
map.put(name,1);
}
else map.put(name,map.get(name)+1);
}
int max = 0;
for(String a : map.keySet()){
max = Math.max(max, map.get(a));
}
for(Map.Entry<String, Integer> entry : map.entrySet()){
if(entry.getValue().equals(max)){
keyList.add(entry.getKey());
}
}
Collections.sort(keyList);
System.out.println(keyList.get(0));
}
}
해설
우선 HashMap을 선언한다. key값은 중복이 불가하므로 이름으로 한다. value는 카운트로 사용한다.
해당 이름이 없다면, 새로운 Hash값을 만들어준다.
이미 존재한다면, 기존의 값에서 value 값을 1 더한다.
이후 가장 큰 value의 값(max)을 구하게 된다.
HashMap에 저장된 값 중 max값에 해당하는 모든 key값을 keyList에 담는다.
Collections.sort를 사용하여 keyList를 정렬시킨다.
맨 앞의 keyList에는 사전 순으로 가장 빠른 key값이 나온다.
개선점이나 오류가 있다면, 댓글 부탁드립니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
*배열* arr3 (java, 알고리즘) (0) | 2022.09.04 |
---|---|
*다중 반복문* 숫자 피라미드(java, 알고리즘) (0) | 2022.09.04 |
[백준] 1026번 보물(java) (0) | 2022.08.31 |
[백준]1373번 2진수 8진수(java) (0) | 2022.08.28 |
[백준]1259번 팰린드롬수(java) (0) | 2022.08.22 |