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

 

 

 

 

 

 

 

 

복사했습니다!