https://www.acmicpc.net/problem/1302
백준 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 |