티스토리 뷰

💡 문제 해결 아이디어

  • 주식이 계속 오를 경우는 따로 저장해두고,
  • 주식이 떨어진 경우에는 저장된 주식들에 대해서 하락까지 걸린 시간을 계산해주고, 저장한 stack에서 빼준다.
  • 자 이제 이 쉬워보이는 내용을 어떻게 구현하는지 보러 가보자!
  • 코드 보기 전 사전지식!
    • Tip1: 리스트에서 lst.pop()를 하면 맨 끝의 요소를 꺼낼 수 있다.
    • Tip2: if문 등에서 뭔가 하나라도 들어있는 리스트는 True, 빈 리스트는 False로 판단한다.
  • 아래 예제들이 이해와 풀이에 도움이 되었으면 좋겠다!!

pop 사용 예제 / 리스트 True, False 예제.

💻 작성된 코드

def solution(prices):
    answer = [i for i in range(len(prices))]
    # 전부 하락하지 않을 경우를 기본으로 세팅.
    answer.reverse()
    # 주식 기록용 stack
    stack = []
    for now_idx, price in enumerate(prices):
    	# 만약 기록된 주식 중 맨 끝의 가격이 지금 가격보다 높다면, 하락한 것...
        while stack and stack[-1][1] > price:
            stop_idx, _ = stack.pop()
            # 정답의 해당 idx(날짜)에 하락까지 걸린 일수를 기록.
            answer[stop_idx] = now_idx-stop_idx
        # 주식 기록
        stack.append([now_idx, price])
    return answer

혹여나 틀린 부분이나, 이해가 안된 부분이 있다면 댓글로 알려주세요!!
잘 보셨다면 공감 한 번만 눌러주세요:) 감사합니다! 🙇‍♂️

댓글