Daily Temperatures - LeetCode
Can you solve this real interview question? Daily Temperatures - Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer
leetcode.com
문제
기준의 날의 온도가 입력되어있는 리스트에서 기준 날의 온도보다 더 높은 온도를 기록한 날과의 날짜 차이를 입력한 리스트를 출력한다.
과정
- output 리스트에 들어가는 값은 인덱스의 차이이다.그리고 마지막에 와서 뒤에 더 큰 값이 없는 애들도 자기 인덱스에 0을 채워넣어줘야 한다.
- 파이썬의 enumerate()는 리스트의 index와 value를 tuple로 반환해주니까 이것을 활용해서 value를 비교하고, index의 차를 새로운 리스트에 넣어준다.
ex)
- [3,4,5] 가 input이라면, index 0자리는 3 index 1은 4이므로 index 1의 자리가 더 크다. 그러므로 1-0 = 1을 해준 후 output에 저장해준다.
- 그 다음 index 1자리는 4, index 2자리는 5이므로 index 2의 자리가 더 크다. 그러므로 2-1=1을 output에 저장해준다.
- index 2자리의 5는 마지막이므로 0이 와서 output은 [1,1,0] 이 와야 한다.
입력
[73,74,75,71,69,72,76,73]
출력
[1,1,4,2,1,1,0,0]
풀이
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
stack = []
lst= [0]*len(temperatures)
for key, val in enumerate(temperatures):
while stack and val > temperatures[stack[-1]]:
last = stack.pop()
lst[last] = key - last
stack.append(key)
return lst
한 줄씩 코드 해석해보기
stack = []
lst= [0]*len(temperatures)
- stack을 이용해 문제를 풀기위한 리스트 생성
- 입력받은 온도 리스트를 모두 0으로 만든 리스트 생성
for key, val in enumerate(temperatures):
- 입력 받은 온도들을 0 ~ 마지막까지 key값을 만들고 val에 값을 넣어준다.
while stack and val > temperatures[stack[-1]]:
last = stack.pop()
lst[last] = key - last
stack.append(key)
- stack의 제일 마지막 key값에 해당하는 온도보다 새로 들어온 온도가 더 높으면, 그 현재의 key 와 그 마지막 key의 차를 정답 리스트에 넣는다.
- stack에는 새 key 값을 넣는다.
return lst
- 모든 차를 구한 후 lst 리스트를 return 한다.
'코딩 테스트 (Python) > 리트코드' 카테고리의 다른 글
[리트코드] 3. 중복 문자가 없는 가장 긴 부분 문자열 (Python) (0) | 2024.01.05 |
---|---|
[리트코드] 771. 보석과 돌 (Python) (0) | 2024.01.05 |
[리트코드] 232. 스택을 사용하여 큐 구현하기 (Python) (0) | 2024.01.04 |
[리트코드] 225. 큐를 이용한 스택 구현 (Python) (0) | 2024.01.04 |
[리트코드] 561. 배열 파티션 (Python) (0) | 2024.01.03 |