문제 링크

요약

  • 증감 추세가 바뀌는 지점을 찾는 문제에서는 stack을 사용하자.

최종

  • 이놈 와 같은 문제다. 증감 추세가 바뀌는 지점을 찾는 문제에서는 stack을 사용하자.
#include <string>
#include <vector>
#include <stack>
 
using namespace std;
 
struct PriceInfo {
	int idx;
	int price;
};
 
vector<int> solution(vector<int> prices) {
	stack<PriceInfo> stk;
	vector<int> ret(prices.size(), 0);
 
	for (int i = 0; i < prices.size(); i++) {
		auto price = prices[i];
		if (stk.empty()) {
			stk.push({i, price});
		} else if (stk.top().price <= price) {
			stk.push({i, price});
		} else /* stk.top().price > price */ {
			while (!stk.empty() && stk.top().price > price) {
				ret[stk.top().idx] = i - stk.top().idx;
				stk.pop();
			}
			stk.push({i, price});
		}
	}
 
	while (!stk.empty()) {
		auto &top = stk.top();
 
		ret[top.idx] = prices.size() - top.idx - 1;
		stk.pop();
	}
 
	return ret;
}