🔔 문제

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

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

prices return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

입출력 예 설명

입출력 예 #1

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

※ 공지 - 2019년 2월 28일 지문이 리뉴얼되었습니다.


📝 문제 접근 과정

처음에 이 문제를 보고, 한동안 이해하지 못했었다.
실력 부족이어서 그런가보다 생각하고, 비교적 쉬운 다른 문제들을 풀고나서 다시 봐야겠다는 생각이 들었다.

그런데, 다시봐도 이해가 잘 되지 않았다.
질문하기 게시판에 들어가보니 나 같이 문제 이해가 안된다는 사람들이 참 많았다.

게시글을 하나하나 쭉 보다가

image
출처 : https://programmers.co.kr/questions/12172

위 글을 발견하게 되었다.
글 내용을 보니 문제가 확실히 이해되었다 (감사합니다 ㅠㅠ)

스택/큐 유형의 문제라고 되있어서 스택으로 풀려고 했는데, 스택으로는 접근하는게 너무 어려웠다.

결국 고민고민하다가 deque을 이용해서 큐 유형의 문제들을 풀었듯이 접근하면, 보다 쉽게 풀 수 있을 것 같아서 그렇게 접근하였고, 마침내 풀 수 있었다.


🔐 해결 (소스 코드)

from collections import deque
# deque을 활용한 풀이

def solution(prices):
    answer = []
    prices = deque(prices)
    
    while prices:
        time = 0 # 시간(초) 세는 변수
        current = prices.popleft() # 떨어지기까지의 시간(초)을 구할 현재가
        
        for price in prices:
            time += 1 # for문이 한 바퀴 돌기 시작할 때마다 시간(초) 1씩 증가시키고,
            if price < current: # 만약 x초 뒤의 가격이 현재가보다 적은 경우
                break # for문을 빠져나오도록!
                
        answer.append(time) # 시간(초) 센 값을 answer(정답) 리스트에 넣어줌   
    return answer

😓 후기

문제해결에 접근하는 머릿 속 생각은 좋았지만, 솔직히 생각만큼 단시간 내에 쉽게 쉽게 풀지는 못했던 것 같다.

이것은 아직 내 실력이 부족하기도 하고, 아이디어도 많이 없고, 난이도가 올라갈수록 코드를 잘 짜는 것에 익숙하지 않기 때문인 것 같다.
(요약하면 어쨋든 실력 부족하다는 얘기 아닌가…;;;)

아직 갈 길이 멀다… 화이팅해서 더 성장하자!!!


👣 참고하기

스택/큐 강의 정리노트 보기

백준 18258번: 큐 2 문제 풀이 보기 (큐, 덱)

백준 2164번: 카드2 문제 풀이 보기 (큐, 덱)

맨 위로 이동하기

Leave a comment