문제 링크
요약
- 증감 추세가 바뀌는 지점을 찾는 문제에서는 stack을 사용하자.
최종
결과
- 이 문제 랑 같은 문제다. 증감 추세가 바뀌는 지점을 찾는 문제에서는 stack을 사용하자.
#define PACK(idx, temp) (((idx) << 12) | ((temp) & 0xFFF))
#define UNPACK_IDX(pack) (((pack) >> 12) & 0xFFFFF)
#define UNPACK_TEMP(pack) ((pack) & 0xFFF)
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> ret(temperatures.size(), 0);
stack<int> stk;
for (int i = 0; i < temperatures.size(); i++) {
if(stk.empty()) {
stk.push(PACK(i, temperatures[i]));
} else {
while (!stk.empty() && UNPACK_TEMP(stk.top()) < temperatures[i]) {
int idx = UNPACK_IDX(stk.top());
ret[idx] = i - idx;
stk.pop();
}
stk.push(PACK(i, temperatures[i]));
}
}
return ret;
}
};