전체 회차
A-025Day 252026.05.29mediumleetcode #739neetcode150

일일 기온

#array#stack#monotonic-stack
leetcode #739 · daily-temperatures
01

문제

· problem
P.025

일일 기온

leetcode #739

정수 배열 temperatures가 주어지며, 각 요소는 매일의 기온입니다. i번째 날 이후로 더 따뜻한 기온을 얻을 때까지 기다려야 하는 날의 개수를 answer[i]에 넣은 배열 answer를 반환합니다. 그러한 날이 없으면 answer[i]는 0으로 유지합니다.

제약
  • · 1 ≤ temperatures.length ≤ 10^5
  • · 30 ≤ temperatures[i] ≤ 100
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
example 1input → output
[73,74,75,71,69,72,76,73]
[1,1,4,2,1,1,0,0]
example 2input → output
[30,40,50,60]
[1,1,1,0]
example 3input → output
[30,60,90]
[1,1,0]
02

사전 사고

· pre-solve
● 1리스트 출력● 2선택● 3정답 공개
  • 다음 날의 기온이 현재 기온과 같으면 '더 따뜻한' 것으로 간주할까요?
  • 더 따뜻한 날이 없으면 answer[i]에 무엇을 넣나요?
  • answer[i]에는 따뜻한 기온의 값을 넣나요, 아니면 대기 일수를 넣나요?
  • 모든 기온이 결국 더 따뜻한 날을 만날 것으로 보장할 수 있나요?
  • 왼쪽에서 오른쪽으로 반드시 처리해야 하나요?
  • 매 날마다 모든 미래 날들을 확인하는 단순 탐색으로 충분할까요?
  • 같은 기온 값이 여러 번 나타날 수 있나요?
던질 질문에 체크하고 확인을 누르세요
// 결과는 세션 메모리만 — 새로고침하면 초기화됩니다 (반복 학습)
03

논리 구조

· logic
● 1슬롯 출력● 2슬롯별 선택● 3정답 공개
// 각 슬롯에 들어갈 코드 한 줄을 골라 알고리즘 흐름을 합성해보세요. 코드는 안 짜지만 논리 뼈대는 직접.
step 1· 결과 배열 초기화
res = [0] * len(temperatures)
res = []
res = [-1] * len(temperatures)
step 2· 스택 초기화
stack = []  # pair: [temp, index]
stack = None
stack = {}
step 3· 주 반복문
for i, t in enumerate(temperatures):
for t in temperatures:
for i in range(len(temperatures)-1, -1, -1):
step 4· 팝 조건중첩
while stack and t > stack[-1][0]:
while t > stack[-1][0]:
while stack and t >= stack[-1][0]:
step 5· 스택에서 꺼내기│ │ 중첩
stackT, stackInd = stack.pop()
stackInd, stackT = stack.pop()
stackT = stack.pop()[0]
step 6· 답 기록│ │ 중첩
res[stackInd] = i - stackInd
res[i] = i - stackInd
res[stackInd] = i
step 7· 스택에 추가중첩
stack.append((t, i))
stack.append(t)
stack.insert(0, (t, i))
각 슬롯에 한 줄씩 골라보세요
// format: slot — 다른 패턴(재귀·DP 등) 은 ordering·state-first 등 별도 format. ADR-08 후속.
04

문제풀이 · 트레이스

· solve
solution.py
1
class Solution:
2
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
3
        res = [0] * len(temperatures)
4
        stack = []  # pair: [temp, index]
5
6
        for i, t in enumerate(temperatures):
7
            while stack and t > stack[-1][0]:
8
                stackT, stackInd = stack.pop()
9
                res[stackInd] = i - stackInd
10
            stack.append((t, i))
11
        return res
머릿속 dry-run 케이스
// 각 케이스를 머릿속으로 따라가보세요. 막히면 아래 worked example 펼침.
case 1
[73,74,75,71,69,72,76,73]
[1,1,4,2,1,1,0,0]
case 2
[30,40,50,60]
[1,1,1,0]
case 3
[30,60,90]
[1,1,0]
// UI 가 walk-through 안 함 — 학습자가 머릿속으로. 막히면 worked example 펼침.