해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
https://school.programmers.co.kr/learn/courses/30/lessons/42584
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
prices: [1, 2, 3, 2, 3]
return: [4, 3, 1, 1, 0]
1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
이 문제는 알고 보니까 스택/큐를 활용해서 해결하는 문제였다.
하지만 나는.. 그런걸 모르고 그냥 구현문제라 생각하고 냅다 풀어버렸다.
물론 어렵게 풀진 않았지만 다른사람의 풀이를 보니 전부 큐를 사용해서 풀이를 하셨더라.
아직은 초창기여서 그렇지만 문제를 보고 어떤 유형의 문제인지를 가장 먼저 파악하는게 제일 중요할 것 같다. 나는 파악하는 단계를 거쳐서 그냥 바로 문제 읽고 구현문제 풀듯이 풀이를 해서 그런지....ㅎ
"""
프로그래머스 LV2: 주식가격
https://school.programmers.co.kr/learn/courses/30/lessons/42584
"""
def solution(prices):
answer = []
# 1초부터 (prices의 길이)초만큼 반복문 순회
for sec in range(1, len(prices)+1):
decreaseCheck = False # 감소하는 값 확인했는지 체크하는 변수
for i in range(sec, len(prices)):
if prices[sec-1] > prices[i]: # 해당 시점의 가격보다 낮은 가격이 있다면 (떨어지고 있는 시점을 확인)
decreaseCheck = True # 감소하는 값 확인 표시
answer.append(i+1-sec) # 가격이 떨어지지 않은 시간 append
break # 반복문 탈출
if decreaseCheck == False: # 해당 시점의 가격보다 낮은 가격이 없음
answer.append(len(prices) - sec) # 가격이 떨어지지 않은 기간을 append
return answer
prices = [1, 2, 3, 2, 3]
print(solution(prices))
물론 프로그래머스에서 테스트케이스랑 효율성 테스트 전부 통과하긴 했지만 다른 사람의 풀이도 궁금해서 봤더니 전부 큐를 사용해서 풀으셔서 나도 한번 다시 풀어보자 하고 풀어봤다.
from collections import deque
def solution(prices):
queue = deque(prices) # queue로 지정
result = []
while queue: # queue에 data가 있는동안
price = queue.popleft() # 시간 순서대로의 price를 pop한다
time = 0 # 시간 변수
for p in queue: # 첫 가격 빼고 남은 데이터들 반복문 순회
time += 1 # 시간 1 추가
if price > p: # 감소세가 보이면
break
result.append(time)
return result
prices = [1, 2, 3, 2, 3]
print(solution(prices))
어쩜 이렇게 간단하고 영롱하단 것이냐... 위에 구현식으로 푼거는 40분정도 걸렸던거 같은데 큐를 사용해서 푸니 10분밖에 안걸렸다 (한번 풀어봐서 그런가?)
어쨌든 이 문제를 풀면서 중요하다고 느낀거는 문제 유형을 파악해서 효율적인 방법을 도출해내는 연습을 많이하자!