https://www.acmicpc.net/problem/11652
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
Long answer = 0L;
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Map<Long, Integer> map = new HashMap<Long, Integer>();
for(int i=0; i<N; i++) {
long card = sc.nextLong();
map.put(card, map.getOrDefault(card, 0)+1);
}
int max = Collections.max(map.values());
Map<Long, Integer> sortedMap = new TreeMap<Long, Integer>(map);
for(Long key : sortedMap.keySet()) {
if(sortedMap.get(key) == max) {
answer = key;
break;
}
}
System.out.println(answer);
}
}
getOrDefault 메서드를 공부한 다음날 바로 사용해볼 수 있는 문제를 만나서 기뻤다ㅋㅋㅋㅋㅋㅋㅋㅋ
이 메서드를 사용하면 맵을 만들어갈때 값이 없는 상태라면 0+1->1 / 값이 있는 상태라면 현재값+1 이라서 카드가 몇개있는지 셀 수 있다.
맵을 만든 후 value 중 가장 큰 값을 찾았고 (가장 많이 갖고있는 카드 개수를 알 수 있음)
TreeMap을 사용하여 오름차순으로 정렬해주었다
가장 많이 갖고있는 카드가 여러개라면 작은 숫자가 적힌 카드가 정답이라는 조건이 있기에 오름차순 정렬 후 순서대로 탐색하면서 max value를 가진 key를 발견시 바로 종료시키면 그게 정답이 된다는 생각이었다
정렬을 하기 위해 맵을 하나 더 만드는 셈인데 이게 실행 시 부담이 갈 수도 있을까?🤔 더 좋은 방법이 있을지 찾아봐야겠다
+
해당 문제를 풀면서 찾아본 HashMap 오름차순 정렬과 최대값/최소값 찾기를 정리해봄
'코딩테스트-알고리즘 > 백준 BOJ' 카테고리의 다른 글
[백준 BOJ/Silver V] 11650번 : 좌표 정렬하기 (1) | 2024.01.15 |
---|---|
[백준 BOJ/Silver V] 1181번 : 단어 정렬 (2) | 2024.01.14 |
[백준 BOJ/Bronze I] 1157번 : 단어 공부 (0) | 2024.01.14 |
[백준 BOJ/Silver I] 금민수의 개수 (2) | 2024.01.09 |
[백준 BOJ/Silver II] 퍼거슨과 사과 (1) | 2024.01.08 |