프로그래머스 더 맵게(scoville) 정답 코드
뿌리튼튼 CS/Algorithm2019. 5. 13. 23:34
난이도 ★★★☆☆
틀리기 쉬운 입출력 예제
입력 | 출력 |
{0}, 0 {0}, 1 {1, 1, 1}, 7 {1, 1, 1}, 8 |
0 -1 2 -1 |
힌트
정렬대신 TreeMap을 꼭 써야합니다.
매번 정렬하면 그때마다 O(N logN)이 들어가지만, TreeMap을 이용하면 그때마다 O(logN)만 들어갑니다. |
이하는 코드입니다.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
import java.util.TreeMap;
public class Solution {
public int solution(int[] scoville, int K) {
TreeMap<Integer, Integer> scovilleCountMap = new TreeMap<>(); // 중복입력에 대응하기 위해 Set이 아닌 Map
for (int num : scoville) {
push(num, scovilleCountMap);
}
int answer = 0;
while (true) {
int min = popMin(scovilleCountMap);
if (min >= K) {
break;
}
Integer nextMin = popMin(scovilleCountMap);
if (nextMin == null) {
answer = -1;
break;
}
int newNum = min + (nextMin * 2);
push(newNum, scovilleCountMap);
answer++;
}
return answer;
}
private Integer popMin(TreeMap<Integer, Integer> countMap) {
if (countMap.isEmpty()) {
return null;
}
int min = countMap.firstKey();
int count = countMap.get(min);
if (count > 1) {
countMap.put(min, count - 1);
} else {
countMap.remove(min);
}
return min;
}
private void push(int num, TreeMap<Integer, Integer> countMap) {
Integer count = countMap.get(num);
if (count == null) {
countMap.put(num, 1);
} else {
countMap.put(num, count + 1);
}
}
}
|
cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 주식가격(prices) 정답 코드 (0) | 2019.05.08 |
---|---|
프로그래머스 탑(heights) 정답 코드 (0) | 2019.05.08 |
프로그래머스 기능개발(progresses) 정답 코드 (0) | 2019.04.25 |
프로그래머스 다리를 지나는 트럭 정답 코드 (0) | 2019.04.23 |
프로그래머스 네트워크(computers) 정답 코드 (0) | 2019.04.17 |