m1ndy5's coding blog

LeetCode 739. Daily Temperatures with Python 본문

알고리즘 with python/알고리즘 스터디

LeetCode 739. Daily Temperatures with Python

정민됴 2024. 1. 4. 10:25

https://leetcode.com/problems/daily-temperatures/

바로 풀이법을 떠올리진 못했던 문제였다.
(떠올렸던 방법은 계속해서 비교하는 거였는데 10^5개까지 리스트 길이가 가능해서 최악에 경우에는 시간초과 당연했다)
그냥 스택이나 큐를 풀차례여서 아 둘 중에 하나를 쓰고 풀어야겠다 라고 생각이 들어서 풀었던 문제..?
이런 비슷한 유형들을 많이 풀어서 해결법을 좀 익혀놔야겠다!

아이디어


생각했던 방법은
스택에는 인덱스를 저장해놓고 스택의 마지막 값과 들어오는 값을 비교해서 들어오는 값이 더 크면 그 둘의 인덱스 차이를 저장하는 방법이었다.

class Solution:
    def dailyTemperatures(self, temperatures):
        l = len(temperatures)
        answer = [0 for _ in range(l)]
        stack = []
        for i, v in enumerate(temperatures):
            # 스택이 비어있으면 그냥 집어넣기
            if not stack:
                stack.append(i)
                continue
            # 스택이 안비었고 현재값이 직전온도보다 높다면
            while stack and v > temperatures[stack[-1]]:
                # 빼고 인덱스 차이만큼을 리스트에 넣기
                last = stack.pop()
                diff = i - last
                answer[last] = diff
            # 스택에 현재 인덱스 추가
            stack.append(i)
        return answer

확실히 처음부터 끝까지 계속 비교하는 것이 아니라 최적으로 비교하기 때문에 좋은 코드이다!
굳!