Devlog_by_0giru

[프로그래머스] 주식 가격 본문

[PS]

[프로그래머스] 주식 가격

0giru_kim 2021. 5. 28. 10:21

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