1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
for (int s : scoville) {
map.put(s, map.getOrDefault(s, 0) + 1);
}
while (map.firstKey() < K) {
if (map.size() < 2) {
answer = -1;
break;
}
int a = map.firstKey();
// 해당 스코빌 지수가 여러 개일 경우 처리
int b = map.get(map.firstKey()) > 1 ? map.firstKey() : map.higherKey(map.firstKey());
int n = a + b * 2;
// 해당 스코빌 지수가 없어지는 경우 처리
if (map.get(a) > 1)
map.put(a, map.get(a) - 1);
else
map.remove(a);
if (map.get(b) > 1)
map.put(b, map.get(b) - 1);
else
map.remove(b);
map.put(n, map.getOrDefault(n, 0) + 1);
answer++;
}
return answer;
}
}
|
cs |
기존에는 ArrayList를 사용했었다.
하지만 문제에서 코드의 효율성을 판단했기에 데이터를 삽입했을 때 자동으로 오름차순 정렬해주는 TreeMap을 사용하였다.
Map의 특성상 중복된 Key는 들어갈 수 없어서 Value를 늘려주는 방식으로 사용했다.
index를 통해 값을 받을 수 없는 Map에서도 map.firstKey, map.lastKey를 통해 첫 번째 키와 마지막 키를 가져오는 방법이 존재했다.
이를 응용한 map.higherKey로 두 번째로 작은 키를 가져왔다.
다른 사람의 풀이를 보니 대부분의 사람들이 PriorityQueue를 사용하고 있었고 이 역시 자동으로 오름차순 정렬해주는 기능이 있었다.
PriorityQueue는 중복된 값을 저장할 수 있었기 때문에 더 좋은 방법이라고 생각한다.
'Programmers > Level2' 카테고리의 다른 글
오픈채팅방 (0) | 2021.07.14 |
---|---|
가장 큰 수 (0) | 2021.07.13 |
타겟 넘버 (0) | 2021.07.12 |
카카오프렌즈 컬러링북 (0) | 2021.07.11 |
문자열 압축 (0) | 2021.07.10 |