728x90
📌 풀이
문제를 이해하기는 어렵지 않다. 리스트의 처음부터 나머지 원소들을 비교해 가격이 떨어지지 않는 유지 시간을 기록하는 것이다.
처음에는 2중 for문을 생각했다. 하지만 2중 for문을 이용할 경우 첫 번째 원소는 상관없지만 두 번째 원소부터는 해당 원소 이전 원소와 비교하지 말아야 하는데 지속해서 이전 원소와도 비교하는 것을 해결할 수 없었다.
따라서 생각해 낸 방법이 prices가 사라질 때 까지 while문을 돌리고 prices의 가장 왼쪽 원소를 pop시켜 남아있는 prices의 원소들과 비교하는 것이다. 이렇게 된다면 2중 for문에서 발생하는 본인 이전 원소와 비교하는 경우를 해결할 수 있다.
[1, 2, 3, 2, 3] 을 예로 들면 우선 1을 popleft 시키고 (deque를 이용하면 양방향 처리가 가능하므로 시간이 단축된다.) 나머지 prices와 비교한다.
이를 순서대로 보면
popleft = 1, prices = [2, 3, 2, 3] -> temp = 4
popleft = 2, prices = [3, 2, 3] -> temp = 3
popleft = 3, prices = [2, 3] -> temp = 1
popleft = 2, prices = [3] -> temp = 1
popleft = 3, prices = [] -> temp = 0
위와 같다.
코드
from collections import deque
def solution(prices):
prices_deque = deque(prices)
result = []
temp = 0
while prices_deque:
compare = prices_deque.popleft()
for price in prices_deque:
if compare <= price:
temp += 1
else:
temp += 1
break
result.append(temp)
temp = 0
return result
'Algorithm' 카테고리의 다른 글
[파이썬] 프로그래머스 - 이중우선순위큐 (0) | 2022.05.17 |
---|---|
[파이썬] 프로그래머스 - 더 맵게 (0) | 2022.05.10 |
[파이썬] 프로그래머스 - 다리를 지나는 트럭 (0) | 2022.05.04 |
[파이썬] 프로그래머스 - 프린터 (0) | 2022.04.17 |
[파이썬] 프로그래머스 - 기능개발 (0) | 2022.04.14 |