https://leetcode.com/problems/daily-temperatures/
매일의 화씨 온도 리스트 T를 입력받아서, 더 따뜻한 날씨를 위해서는 며칠을 더 기다려야 하는지를 출력하라.
이 문제도 스택을 이용하면 상당히 좋은 성능으로 문제를 해결 할 수 있다.
1. answer=[0]*len(temperature)로 두어서 정답값을 바로바로 참조해서 변경할 수 있도록 한다.
2. enumerate를 사용해서 인덱스를 바로 사용하면 더 간단히 해결할 수 있다.
3. stack에 인덱스를 집어넣은 다음 stack[-1]의 인덱스를 가지는 온도값보다 높은 온도를 갖는 인덱스가 나올때 까지 인덱스를 집어 넣는다.
4. 결과(answer)를 꼭 차례대로 주입해야 할 필요는 없다는걸 배웠다.
5. 'while stack and (조건) / 옆에 조건에 해당하지 않으면 stack.append()' 이런 코드가 스택 문제에서 잘 사용되는것 같다.
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
answer=[0] * len(temperatures)
stack=[]
for i,temp in enumerate(temperatures):
while stack and temperatures[stack[-1]] < temp:
last=stack.pop()
answer[last]=i-last
stack.append(i)
return answer
'알고리즘 > 큐, 스택' 카테고리의 다른 글
15. 해시 - 상위 K 빈도 요소(우선순위 큐, *,zip) (0) | 2021.08.30 |
---|---|
14. 큐 (0) | 2021.08.30 |
12. 스택 - 중복문자 제거 (0) | 2021.08.26 |
11. 스택 - 유효한 괄호 (0) | 2021.08.26 |
10. 선형 자료 구조 - 스택 (0) | 2021.08.26 |