https://school.programmers.co.kr/learn/courses/30/lessons/42584
너무 쉬운 스택 문제였는데....... 처음부터 길을 잘못드는 바람에 소스가 산으로 갔다 왔다.
주식 가격이 계속 오르고 있을 땐 스택에 쌓아주고,
주식 가격이 이전 가격보다 떨어지는 순간
스택에서 현재 가격보다 높은 가격인 순간을 모두 꺼내어 시간값을 계산해준다.
비록 스택이 자동으로 오름차순 정렬해주진 않지만 위 로직에 의하면 오름차순 정렬한 것과 다를바 없어지므로 정렬엔 신경 쓸 필요가 없다.
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
Stack<Stock> stack = new Stack();
int[] answer = new int[prices.length];
for (int i = 0; i < prices.length; i++) {
Stock next = Stock.of(i, prices[i]);
while (!stack.isEmpty()) {
Stock prev = stack.peek();
if (prev.price <= next.price) {
break;
}
prev = stack.pop();
answer[prev.time] = i - prev.time;
}
stack.push(next);
}
while (!stack.isEmpty()) {
Stock stock = stack.pop();
answer[stock.time] = prices.length - stock.time - 1;
}
return answer;
}
static class Stock {
int time;
int price;
static Stock of(int time, int price) {
Stock vo = new Stock();
vo.time = time;
vo.price = price;
return vo;
}
}
}