문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.
예제 입력, 예제 출력
[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
코드 및 설명
def solution(prices):
stack_prices = prices
answer = []
while stack_prices:
count = 0
price = stack_prices.pop(0)
for val in stack_prices:
count += 1
if price > val:
break
answer.append(count)
return answer
이 문제는 처음 들어온 주식의 가격이 다음 주식의 가격보다 높은 지 적은지를 체크하고 몇 초동안 유지되었는 지를
구하는 문제이다. 위에 코드처럼 작업을 하였으나, 정확성에서는 통과되나, 효율성에서 떨어진다.
deque를 이용해야 효율성에서 통과한다.
예제로 설명하겠다.
[1, 2, 3, 2, 3]
stack_prices가 없어질때까지 돌게 되는데 stack_prices.popleft를 하면 1이 들어올 것이고 1의 값이 stack_prices값들보다
작으면 count + 1를 해주고 price값이 val보다 커지는 순간 break를 해준다. count는 4가 되고 answer.append()해준다.
[2, 3, 2, 3]
stack_prices.popleft를 하면 2가 들어올 것이고 반복해준다.
[3, 2, 3]
[2, 3]
[3]
answer = [4, 3, 1, 1, 0]
stack_prices가 빌때까지 돌 것이고 answer에 답이 담길 것이다. 그럼 return해주면 된다.
from collections import deque
def solution(prices):
stack_prices = deque(prices)
answer = []
while stack_prices:
count = 0
price = stack_prices.popleft()
for val in stack_prices:
count += 1
if price > val:
break
answer.append(count)
return answer
'삽집하는 개발들 > 알고리즘' 카테고리의 다른 글
[98일차] 접미사 배열 - 백준 - 11656(python - 문자열, 정렬) (21) | 2023.12.17 |
---|---|
[97일차] ROT13 - 백준 - 11655(python - 문자열) (4) | 2023.12.16 |
[96일차] 문자열 분석 - 백준 - 10820(python - 문자열) (3) | 2023.12.15 |
[96일차] 알파벳 찾기- 백준 - 10809(python - 문자열) (1) | 2023.12.15 |
[96일차] 알파벳 개수 - 백준 - 10808(python - 문자열) (0) | 2023.12.15 |