문제 확인

 

프로그래머스

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

programmers.co.kr


나의 풀이

  • 완전 탐색으로 풀면 시간 복잡도가 $O(N^2)$이기 때문에, 다른 방법으로 접근했다.
  • 우선, 가격이 떨어지지 않는 경우를 가정해서 초기 [ic]answer[/ic]를 설정했다.
  • 이후 가격이 떨어진다면, 현재 시간과 해당 prices 값이 입력된 시간 사이 차이를 계산해 answer 값을 수정해야 했다.
    • '어떻게 구하지?'라고 고민하다가 결국 다른 사람 풀이를 참고했다.
# 가격이 떨어지지 않은 기간
# '초기화 - 갱신'을 어떤 방식으로 할 지 고민
# [1] -> [1, 2] -> [1, 2, 3] -> [1, 2, 3, 2] -> [1, 2, 3, 2, 3]
# 새로 입력될 값이 stack의 마지막 보다 작은 경우 -> 그때 갱신

def solution(prices):
    # 초기 값 입력
    # 한번도 떨어지지 않을 때 가정
    plus_time = [i for i in range(len(prices) - 1, -1, -1)]
    # N초 정보
    time = []
    for i, price in enumerate(prices):
        # 가격이 떨어진 경우 처리
        # 이전 시간의 정보를 확인 함
        while time and prices[time[-1]] > price:
            j = time.pop()
            plus_time[j] = i - j
        # 현재 시간 정보 저장
        time.append(i)
    return plus_time

참고

 

Programmers | 주식가격 - Python

3주차 알고리즘 스터디 - 스택/큐 (Stack/Queue) : 프로그래머스 Level2 주식가격 접근 방식 및 풀이 과정

velog.io