문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한 조건
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
입출력 예 설명
- 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
- 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
- 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
- 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
- 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
제출
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
💬 후기
이중 for 문으로 접근했는데 이 문제는 스택/큐 문제였다는 점 !!
popleft을 사용해서 왼쪽부터 차근차근 비교해보자.
첫 번째 반복에서는 c에 1이 할당되고 나머지 prices는 [2,3,2,3] 이 된다.
→ 1보다 작은 숫자가 없기 때문에 count 는 4
두 번째 반복에서는 c에 2가 할당되고 나머지 prices는 [3,2,3] 이 된다.
→ 2보다 작은 수가 역시 없기 때문에 count는 3
세 번째 반복에서는 c에 3이 할당되고 나머지 prices는 [2,3] 이 된다.
→ 3보다 작은 수 2가 있다 !! 그러면 count에 +1만 되고 break 로 나온다.
네 번째 반복에서는 c에 2가 할당되고 나머지 prices는 [3]이 된다.
→ 2보다 작은수가 없다. count는 1
마지막 다섯 번재 반복에서는 c에 3이 할당되고 나머지 prices는 없다.
→ 마지막이기 때문에 count 는 0
Tip.
하나 ! popleft를 사용하여 c에 저장
둘 ! answer 리스트에 count 추가
'알고리즘 문제' 카테고리의 다른 글
[Python] 기능개발(스택/큐) (0) | 2023.11.29 |
---|---|
[Python] 조이스틱(그리디) (1) | 2023.11.27 |
[Python] 피로도(브루트포스) (1) | 2023.11.27 |
[Python] 큰 수 만들기(그리디) (0) | 2023.11.26 |
[Python] 다리를 지나는 트럭(스택/큐) (1) | 2023.11.24 |