문제

→ 화씨 온도 리스트 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개의 스택을 사용한다.

  1. 입력값 T

    T = [73, 74, 75, 71, 69, 72, 76, 73]
    
  2. 답 answer

    answer = [0] * len(temperatures)
    >>> [0, 0, 0, 0, 0, 0, 0, 0]
    
  3. 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)