https://leetcode.com/problems/daily-temperatures/
이 문제는 주어진 일별 온도 배열에서 각 날짜에 대해 더 따뜻한 날씨를 맞이하기 위해 몇 일을 기다려야 하는지를 구하는 문제다. 만약 더 따뜻한 날이 없다면 0을 반환하면 된다.
문제를 다시 한번 살펴보면 첫번째 날짜부터 차례대로 순회하는 상황에서, i
번째 날짜의 온도에 대하여
현재의 날짜보다 온도가 낮은 날짜들의 정보를 순서를 유지한 상태에서 저장을 했다면 각각의 저장된 날짜마다 answer에 들어갈 값을 찾아낼 수 있다. 그리고 값을 구한 날짜의 온도에 대한 값은 더 이상 필요가 없다.
각 날짜에 대해 더 따뜻한 날씨를 맞이하기 위해 기다려야 하는 날짜 수를 구하는 것이고 이를 stack을 통해서 구현할 수 있다. stack을 사용하여 각 날짜의 인덱스를 추적한다. 결과 리스트 ans를 0으로 초기화하고 각 날짜와 온도를 반복문을 통해 stack에 따뜻한 날을 찾지 못한 날짜의 인덱스를 저장한다. 현재 온도가 stack의 맨 위에 저장된 날짜의 온도보다 높으면, stack에서 해달 날짜를 꺼내고 기다린 날짜 수를 계산하여 결과 리스트에 저장한다. 이를 통해 현재 날짜와 온도를 스택에 추가하고 문제를 푼다.
from typing import List
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
# 기본 값 세팅
ans = [0] * len(temperatures)
stack = []
# temperatures 배열을 순회하면서 answer 배열을 채운다.
for day, temp in enumerate(temperatures):
# 스택이 비거나 스택의 마지막 온도가 현재 온도보다 커질 때까지 스택에서 pop하며 값을 계싼
while stack and stack[-1][1] < temp:
prev_day = stack.pop()[0]
# 스택에 저장해둔 해당 온도의 인덱스와 현재 인덱스를 통해 answer에 계산한 값 저장
ans[prev_day] = day - prev_day
# 스택에 현재 temperatures의 인덱스와 온도 저장
stack.append((day, temp))
return ans
++ 0711
enumerate 잘 사용해보기!!!!