++/자료구조&알고리즘

[Leetcode] 739. Daily Temperatures

writtenbyrla 2024. 1. 4. 22:50

✅ 문제 - 일일 온도

 

현재 기온보다 더 높은 기온의 날을 며칠 더 기다려야 하는지 구하는 문제다.

 

 


✅ 풀이

def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
    answer = [0]*len(temperatures) #[0,0,0,0]
    stack = []

    #enumerate: 인덱스와 값의 쌍 생성
    for i, cur in enumerate(temperatures):

        # stack에 값이 있고, 현재 온도가 스택에 담긴 인덱스에 해당하는 온도보다 높은 경우
        while stack and cur > temperatures[stack[-1]]:
            last = stack.pop()
            answer[last] = i - last
        stack.append(i)
    return answer
💡 Point
1. 반환할 answer 배열값 기본 0으로 세팅해서 온도 배열의 길이만큼 생성
2.  기온과 answer 인덱스는 함께 이동
3. 인덱스를 담을 stack[] 배열
4. 현재 기온이 stack에 남아있는 인덱스에 해당하는 기온보다 더 높다면, 기존에 남은 날에 대한 answer값을 반환
 4-1) answer값은 현재 인덱스 - 해당 인덱스 차이 = 며칠 기다리는지
 4-2) answer값 나왔으므로 stack에서 비워주기
 4-3) 현재 인덱스 stack에 담아 다음 인덱스로 이동

 

 

 

도무지 이해가 가지않아 노트에 직접 다 그려보고 계산해봤다..... 진짜 광기인가....?

풀이 코드를 보고 해석하는 것은 이제 어느정도 할 수 있을 것 같은데

문제만 보고 내가 직접 아무것도 없는 상태에서 코드를 짜는건 어렵다ㅠㅠ 늘긴 할까? ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

일단 손으로 그리면서 이해가 감과 동시에 노트를 덮어버리고 싶었으나 금방 증발해버릴것 같아서 표로 정리해옴

내꺼로 만들자... 스택, 큐, 데크 정복하고 만다 진짜