쉽게 생각해내기는 어려운 풀이라고 생각한다.
현재 시간 - 스택 최상위 인덱스(마지막으로 높았던 가격)
를 정답 배열에 저장한다.import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer> st = new Stack<>();
for(int i = 0; i < prices.length; i++) {
while(!st.isEmpty() && prices[i] < prices[st.peek()]) {
answer[st.peek()] = i - st.peek();
st.pop();
}
st.push(i);
}
while (!st.isEmpty()) {
answer[st.peek()] = prices.length - st.peek() - 1;
st.pop();
}
return answer;
}
}
for(int i = 0; i < prices.length; i++) {
while(!st.isEmpty() && prices[i] < prices[st.peek()]) {
answer[st.peek()] = i - st.peek();
st.pop();
}
st.push(i);
}
현재 시간 - 스택 peek() 값
을 저장하고, pop()
한다.while (!st.isEmpty()) {
answer[st.peek()] = prices.length - st.peek() - 1;
st.pop();
}