[프로그래머스 알고리즘 Kit] 스택/큐 - 주식가격

2023. 10. 30. 22:58·프로그래밍/Python

https://school.programmers.co.kr/learn/courses/30/lessons/42584

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제설명

 

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하는 것이다. 

 

 

 

제한사항

 

prices의 길이는 2 이상 100,000 이하이다.

 

 

 

 

구현1

def solution(prices):
    answer = []
    temp = prices
    while len(temp) > 0:
        price = temp.pop(0)
        count = 0
        for item in temp:
            count += 1
            if price > item:
                break
        answer.append(count)
    return answer

위와 같이 구현하였을 때 올바르게 리턴은 되지만 효율성 테스트 모두 실패하였다. 효율성 있는 코드를 구현하려면 시간복잡도 O(10^12)을 보통 넘기면 안된다. 

위 문제에서 주어진 제한사항을 보면 시간복잡도에 관여되는 prices의 길이가  2이상 10^5이하로 O(n^2)을 풀게된다면 최악의 시간복잡도가 O(n^12)이기 때문에 효율성 테스트에서 간당간당하게 실패한 포인트를 찾아야한다. 

 

따라서, 이를 개선해보겠다. 

 

 

구현2

from collections import deque #deque 사용

def solution(prices):
    answer = []
    temp = deque(prices) #deque 사용
    while len(temp) > 0:
        price = temp.popleft() #deque 메소드 사용
        count = 0
        for item in temp:
            count += 1
            if price > item:
                break
        answer.append(count)
    return answer

list의 pop(0)의 경우 복잡도가 O(n)으로 2중 반복문으로 구현하여 O(n^2)에서 O(n)연산이 추가되었기 때문에 효율성 테스트에서 실패했던 것이다. 

 

이때, 활용하기 좋은 것이 파이썬에서 제공하는 deque이다. 이를 사용하시면 O(1)의 복잡도로 popleft() 왼쪽에서의 첫번째 원소를 뽑아올 수 있어 시간복잡도가 줄어든다. 

 

아래의 wiki를 참고하자.

 

https://wiki.python.org/moin/TimeComplexity

 

TimeComplexity - Python Wiki

This page documents the time-complexity (aka "Big O" or "Big Oh") of various operations in current CPython. Other Python implementations (or older or still-under development versions of CPython) may have slightly different performance characteristics. Howe

wiki.python.org

 

'프로그래밍 > Python' 카테고리의 다른 글

[Leetcode] DFS/BFS - Number of Islands  (2) 2023.12.08
[프로그래머스 알고리즘 Kit] 스택/큐 - 다리를 지나는 트럭  (0) 2023.11.05
[Leetcode] 이중연결리스트 - Design Browser History  (0) 2023.10.26
이중연결리스트(Doubled Linked-List) 구현  (0) 2023.10.24
[김왼손의 왼손코딩] 파이썬 기초강의(2)  (0) 2023.10.18
'프로그래밍/Python' 카테고리의 다른 글
  • [Leetcode] DFS/BFS - Number of Islands
  • [프로그래머스 알고리즘 Kit] 스택/큐 - 다리를 지나는 트럭
  • [Leetcode] 이중연결리스트 - Design Browser History
  • 이중연결리스트(Doubled Linked-List) 구현
횰쓰
횰쓰
개발 성장 블로그입니다
  • 횰쓰
    횰쓰토리
    횰쓰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS 공부
        • 운영체제
        • 네트워크
        • 컴퓨터구조
        • 데이터베이스
        • 알고리즘
        • 소프트웨어공학
        • 자료구조
        • 웹
      • 프로그래밍
        • Python
        • NodeJS
      • 프로젝트
        • React 프로젝트
      • 개발도구
        • Git
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    RB Tree
    페이지 교체
    AVL트리
    Min힙
    Sync/Async
    멀티 프로세스
    최태성인강
    Push-force
    운영체제
    자가균형 이진탐색트리
    큐
    전이진트리
    chrome
    둘만의 암호
    경쟁상태(Race Condition)
    Git
    Max힙
    포화이진트리
    이진탐색트리
    리스트정렬여부
    SQL/NOSQL
    카드뭉치
    스택
    4 way handshake
    멀티 스레드
    RB트리
    tcp
    프로세스 주소공간
    한국사능력검정시험 심화
    3 Way Handshake
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
횰쓰
[프로그래머스 알고리즘 Kit] 스택/큐 - 주식가격
상단으로

티스토리툴바