일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 9663
- 백준 1535
- 데카르트 곱
- 미로탐색
- 백준
- 2606
- list
- dfs
- 8-queen
- BOJ 2606
- 파이썬
- BFS
- 리스트
- 타겟 넘버
- 가장 긴 증가하는 부분수열
- python
- 백준 2606
- 증가하는 부분수열 2
- 백준_2178
- 백준 9252
- 냅색
- 평범한 배낭
- 소수찾기
- 백준 12015
- 대소비교
- 프로그래머스
- 12865
- boj 11053
- 알고리즘
- LCS2
- Today
- Total
Devlog_by_0giru
[프로그래머스] 주식 가격 본문
https://programmers.co.kr/learn/courses/30/lessons/42584
코딩테스트 연습 - 주식가격
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00
programmers.co.kr
일단 문제 해석이 어색하게 될 수 있어서 좋은 문제는 아니라는 생각이 든다.
질문을 검색하면 다른 사람들도 문제 이해에 많은 혼란을 겪은 듯 하다.
문제에서 주식 가격이 바로 다음 순간에 바뀌더라도, 1초간 가격이 변동되지 않았다는 것으로 간주해야 한다는 점이 포인트이다.
즉, 다음 원소가 더 작은지 여부를 판단하기보단 가격이 떨어지기 전 까지의 '간격의 개수'를 찾는 문제였다.
처음 풀이에서 정확성 테스트는 모두 통과가 되었는데, 효율성이 모두 빵점이 나왔다.
이전까지는 큐를 이용해야 할 때 collections 패키지의 deque를 사용했었는데, 이번 문제에서 리스트의 pop(0) 메소드를 이용한 것이 문제였다.
리스트의 pop() 메소드는 원하는 인덱스까지 찾아간 후 pop을 하기 때문에 최대 O(n)의 시간 복잡도를 가지고 deque의 popleft() 의 경우에는 O(1)을 가지기 때문이다.
어차피 이 문제에서는 리스트를 큐 처럼 사용하기 때문에 pop을 사용해도 1의 시간이 걸릴거라고 생각했는데 아니었다...
from collections import deque
def solution(prices):
result = list()
q = deque()
for i in prices:
q.append(i)
while q:
count = 0
temp = q.popleft()
for i in q:
count += 1
if temp > i:
break
result.append(count)
return result
'[PS]' 카테고리의 다른 글
[boj] N-Queen (1) | 2021.06.21 |
---|---|
[프로그래머스] H-index (0) | 2021.06.12 |
[프로그래머스] 프린터 (0) | 2021.05.25 |
[프로그래머스] 카펫 (0) | 2021.05.14 |
[프로그래머스] 타겟 넘버 (0) | 2021.04.20 |