LeetCode 739번 Daily Temperatures

수원 개발자·2024년 7월 25일
0
post-thumbnail

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

배우게 된 점

  1. enumerate에 대해서 잘 사용을 하지 못하는 것 같다. 관련 개념을 좀 공부해야할 필요가 있을 것 같다
  2. stack을 어느정도 이해하고 이 문제를 접근했다고 생각했음에도 불구하고 풀기가 어려웠다. 다시 stack에 대해서 남들에게 설명할 수 있을 정도로 공부하고 다시 풀어봐야 겠다.

++ 0711

enumerate 잘 사용해보기!!!!

0개의 댓글