[알고리즘 프로그래머스] 주식가격 (LEVEL 2)
(문제) 주식가격 (스택/큐)
초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.
출력설명
가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성
테스트케이스
입력예제 | 출력예제 |
---|---|
[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
[3, 2, 1, 2, 5, 4, 1, 3, 1] | [1, 1, 6, 3, 1, 1, 2, 1, 0] |
해결방법
인덱스 0은 1초 시점 / 인덱스 1은 2초 시점 / 인덱스 3은 3초 시점 …..
[중요] 생각을 할 때, 1초간!!! 이라는 단어를 잘 생각해야한다.
이 1초간이라는 의미는 1초에 1원일때 만약 2초는 0원이 되면 1초간은 떨어지지 않았기 때문에 + 1이 되는 것이다.
1초 후에는 떨어지는 것이지만 1초간이기 때문에 떨어지는 것이 아니다.
인덱스 0 (1초) : 가격이 떨어지지 않는 경우
시작은 1초 시점(인덱스0)에서 시작하면 1초 자체는 그대로 이므로 + 1은 무조건 한다.
그다음 2초 시점(인덱스1)에서 자기보다 작지않으면 + 1 한다.
그다음 3초 시점(인덱스2)에서 자기보다 작지않으면 + 1 한다.
…. 반복한다.
인덱스 2 (3초) : 다음 초에 가격이 떨어짐
시작은 3초 시점(인덱스2)에서 시작하면 일단 자기 자신 초는 작지않기 때문에 + 1을 한다. (1초간은 안 떨어지기 때문에)
그다음 4초 시점(인덱스3)에서 자기보다 작아지므로 끝낸다.
인덱스 3 (4초) : 다음 초가 끝
4초에서 ~ 5초까지 1초간 떨어지지 않고, 5초 다음은 없으니 +1만 되고 끝난다.
코드
from collections import deque
arr = deque([3, 2, 1, 2, 5, 4, 1, 3, 1])
answer = []
while True:
if not arr:
break
cnt = 0
current = arr.popleft()
# 마지막에 리스트 안에 값이 없으면 반복문은 안한다.
for x in arr:
# 1초간 즉 자신의 시간 포함
if current > x:
print(arr)
cnt = cnt + 1
break
cnt = cnt + 1
answer.append(cnt)
print(answer)
댓글남기기