[99클럽 코테 스터디 2일차 TIL] 힙과 우선순위 큐
힙(Heap)
우선순위 큐(PriorityQueue)
문제 풀이
프로그래머스 코딩테스트 연습 - 더 맵게문제를 풀어보자.
문제
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K
이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K
이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
1
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
Leo는 모든 음식의 스코빌 지수가 K
이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville
과 원하는 스코빌 지수 K
가 주어질 때, 모든 음식의 스코빌 지수를 K
이상으로 만들기 위해 섞어야 하는 최소 횟수를 return
하도록 solution
함수를 작성해주세요.
제한 사항
scoville
의 길이는 2 이상 1,000,000 이하입니다.K
는 0 이상 1,000,000,000 이하입니다.scoville
의 원소는 각각 0 이상 1,000,000 이하입니다.- 모든 음식의 스코빌 지수를
K
이상으로 만들 수 없는 경우에는 -1을return
합니다.
풀이
삽질하기 - ArrayList를 이용한 방식의 문제점
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int solution(int[] scoville, int K) {
int answer = 0;
int newFood = 0;
ArrayList<Integer> scovilleList = (ArrayList<Integer>) Arrays.stream(scoville)
.boxed()
.collect(Collectors.toList());
// 음식들이 존재하고 가장 작은 스코빌 지수가 K보다 작은 동안 반복한다
while (!scovilleList.isEmpty() && scovilleList.get(0) < K) {
newFood = scovilleList.get(0) + (scovilleList.get(1) * 2);
scovilleList.remove(0);
scovilleList.remove(0);
scovilleList.add(0, newFood);
scovilleList.sort(Comparator.naturalOrder());
answer += 1;
}
return answer == 0 ? -1 : answer;
}
PriorityQueue 사용하기
– 작성중 –
This post is licensed under CC BY 4.0 by the author.