
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.
떠오르는 대로 중첩 for문을 사용하여 풀었다. 간단하지만 효율성은 좋지 못하다.
def solution(prices):
answer = []
count = 0
for i in range(len(prices) - 1):
for j in range(i + 1, len(prices)):
if prices[i] <= prices[j]:
count += 1
else:
count += 1
break
answer.append(count)
count = 0
answer.append(0)
return answer
다른 사람의 풀이에 큐를 사용한 방법을 보면 prices를 deque자료형으로 만들고
비교되어지는 prices의 원소를 popleft()하여 c에 대입한 다음,
deque에 남아있는 원소들과 비교하는 방법을 사용하였다.
마찬가지로 간단하지만 효율성은 더 뛰어나다.
from collections import deque
def solution(prices):
answer = []
prices = deque(prices)
while prices:
c = prices.popleft()
count = 0
for i in prices:
if c > i:
count += 1
break
count += 1
answer.append(count)
return answer
효율성 테스트를 보면 위와 아래의 코드의 실행시간 차이가 2배정도 나는 것을 알 수 있다.