[프로그래머스 알고리즘] 프로그래머스 Lv.2: 주식가격 / 파이썬 Python3 (스택/큐)
🔔 문제
출처 : 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일 지문이 리뉴얼되었습니다.
📝 문제 접근 과정
처음에 이 문제를 보고, 한동안 이해하지 못했었다.
실력 부족이어서 그런가보다 생각하고, 비교적 쉬운 다른 문제들을 풀고나서 다시 봐야겠다는 생각이 들었다.그런데, 다시봐도 이해가 잘 되지 않았다.
질문하기 게시판에 들어가보니 나 같이 문제 이해가 안된다는 사람들이 참 많았다.게시글을 하나하나 쭉 보다가
출처 : 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
😓 후기
문제해결에 접근하는 머릿 속 생각은 좋았지만, 솔직히 생각만큼 단시간 내에 쉽게 쉽게 풀지는 못했던 것 같다.
이것은 아직 내 실력이 부족하기도 하고, 아이디어도 많이 없고, 난이도가 올라갈수록 코드를 잘 짜는 것에 익숙하지 않기 때문인 것 같다.
(요약하면 어쨋든 실력 부족하다는 얘기 아닌가…;;;)아직 갈 길이 멀다… 화이팅해서 더 성장하자!!!
Leave a comment