문제
→ 화씨 온도 리스트 T를 입력받는다.
→ 더 따뜻한 날씨온도가 나올때까지의 날짜를 반환한다.
→ ex) T = [73, 74, 75, 71, 69, 72, 76, 73]
output = [1, 1, 4, 2, 1, 1, 0, 0]
접근방법
→ 반복문을 돌면서 인덱스를 스택에 쌓는다.
→ 현재 온도와 스택의 top 부분 온도와 비교한다.
→ top이 더 클 경우 stack에서 제거하고 현재 인덱스에서 스텍에 있던 인덱스를 빼서 답에 추가
→ top이 더 작을 경우 stack에 인덱스를 쌓는다.
핵심
→ 총 2가지 리스트와 1개의 스택을 사용한다.
입력값 T
T = [73, 74, 75, 71, 69, 72, 76, 73]
답 answer
answer = [0] * len(temperatures)
>>> [0, 0, 0, 0, 0, 0, 0, 0]
stack
stack = []
코드 진행
→ answer과 stack 선언
answer = [0] * len(temperatures)
stack = []
→ enumerate()사용하여 index와 value 반환
for i, cur in enumerate(temperatures) :
→ 현재 value와 stack의 top부분 비교하여 반복문 수행
while stack and cur > temperatures[stack[-1]] :
last = stack.pop()
answer[last] = i - last
→ 현재 index stack에 추가
stack.append(i)
전체코드
def dailyTemperatures(temperatures):
answer = [0] * len(temperatures)
stack = []
for i, cur in enumerate(temperatures) :
while stack and cur > temperatures[stack[-1]] :
last = stack.pop()
answer[last] = i - last
stack.append(i)