📖 오늘의 학습 키워드
큐
[Minimum Number of Coins for Fruits]
https://leetcode.com/problems/minimum-number-of-coins-for-fruits/description/
class Solution {
public int minimumCoins(int[] prices) {
int len = prices.length;
Deque<Integer> q = new ArrayDeque<>();
for(int i = len; i > 0; i--) {
while(!q.isEmpty() && q.peek() > i * 2 + 1) {
q.poll();
}
if(i <= (len - 1) / 2) {
prices[i - 1] += prices[q.peek() - 1];
}
while(!q.isEmpty() && prices[q.peekLast() - 1] >= prices[i - 1]) {
q.pollLast();
}
q.offer(i);
}
return prices[0];
}
}
Deque
q
를 선언한다. 삭제를 양쪽으로 수행하기 위해 Deque
을 사용한다.i
가 len
(배열의 길이)부터 1
까지 for 문을 돌며 i
번째부터 끝까지 모든 과일을 샀을 때 필요한 최소 동전의 수를 계산한다.q
가 비어있지 않고, 맨 앞의 값이 i * 2 + 1
보다 크다면 해당 값을 사용할 수 없으므로 그런 값이 없을 때까지 q
에서 제거한다.i
가 (len - 1) / 2
보다 크지 않다면 prices[i - 1]
에 prices[q.peek() - 1]
값을 더한다. q
가 비어있지 않고, 맨 뒤의 요소에 해당하는 과일의 가격이 i번째 과일의 가격보다 크다면 마지막 요소를 q
에서 제거한다.q
에 i
를 추가한다.