739. Daily Temperatures
2026-03-25
리트코드 739번 풀이
문제
풀이
아이디어
단조 감소 스택(monotonic decreasing stack)을 사용한다. 스택에 [day, temperature] 쌍을 저장하고, 현재 온도가 스택 top보다 높으면 해당 날의 답을 계산하며 pop한다.
첫번재 풀이에서는 온도를 스택에 함께 저장해주긴 했는데, 사실 temperatures 배열이 원본 그대로 쭉 유지되기 때문에 스택에 인덱스만 저장해주고 온도는 temperatures 배열을 참조해도 괜찮긴 하다.
코드
[day, temperature] 쌍을 저장하는 풀이
function dailyTemperatures(temperatures: number[]): number[] {
const stack: number[][] = []; // [day, temperature]
const ans: number[] = new Array(temperatures.length).fill(0);
for (let day = 0; day < temperatures.length; day++) {
const temperature = temperatures[day];
while (stack.length !== 0 && stack[stack.length - 1][1] < temperature) {
ans[stack[stack.length - 1][0]] = day - stack[stack.length - 1][0];
stack.pop();
}
stack.push([day, temperature]);
}
return ans;
}인덱스만 저장하는 풀이
function dailyTemperatures(temperatures: number[]): number[] {
const stack: number[] = []; // index only
const ans = new Array(temperatures.length).fill(0);
for (let i = 0; i < temperatures.length; i++) {
while (stack.length && temperatures[stack[stack.length - 1]] < temperatures[i]) {
const j = stack[stack.length - 1];
stack.pop();
ans[j] = i - j;
}
stack.push(i);
}
return ans;
}시간 / 공간 복잡도
- 시간 복잡도: O(n) — 각 원소가 스택에 최대 한 번 push/pop
- 공간 복잡도: O(n) — 스택과 결과 배열