Algorithm & Data Structure/Programmers

[Programmers]Python_주식가격

ju_young 2021. 1. 18. 07:45
728x90
문제

 

문제 설명

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

 

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

 

코드
from collections import deque
def solution(prices):
    prices = deque(prices) #deque 형식으로 변환
    answer = []
    
    while prices:
        cur_time = 0 #0초부터 시작
        cur_price = prices.popleft() #가장 앞에 있는 price = 현재 price
        for price in prices:
            #다음 price가 현재 price보다 크거나 같으면 떨어지지 않은 것이므로 time += 1
            if cur_price <= price: 
                cur_time += 1
            #떨어졌다면 1초 경과 후 떨어진 것이므로 time += 1이후 break
            else:
                cur_time += 1
                break
        answer.append(cur_time)
    return answer

 

진행 과정

 

예제 #1

prices = [1, 2, 3, 2, 3]

 

처음에 헷갈리는 부분이 있었다. 가격이 떨어지지않으면 1초 증가하고 가격이 떨어졌는데 1초 경과 후 떨어진 것이라고 하니 이게 무슨 말인가하고 고민을 조금 했던 것 같다.

 

우선 떨어지지 않았을때만을 생각하고 코드를 구현하면 이렇다.

 

while prices:

    cur_time = 0

    cur_price = prices.popleft()

    for price in prices:

        if cur_price <= price:

            cur_time += 1

 

위에서 코드 작성된 것이랑 별로 큰 차이는 없다. 단지 가격이 떨어졌을때를 추가로 생각하여 구현한 것이다.

 

떨어졌을때는 1초 경과 후 떨어지는 것이라고 한다. 왜냐하면 현재 시점부터 다음 시점까지 1초의 간격이 있기 때문이다. 이 간격동안은 떨어지지않은 것이기 때문에 1초 경과 후 떨어지는 것이라고 보는 것 같다.

 

마지막 price는 더 이상 떨어지지도 올라가지도 않으므로 0초가 경과했다고 본다.

 

여기서 코드 작성된 것을 보면 "for price in prices"에서 마지막 price가 cur_price로 진행됬을때 아무 것도 없으므로 cur_time은 0이 된다. 즉, 떨어지는 경우까지만 생각해도 이미 문제가 풀렸다는 것이다.

 

코드 진행은 다음과 같다.

 

1) cur_price = 1
2) cur_time = 0
3) cur_time = 1
4) cur_time = 2
5) cur_time = 3
6) cur_time = 4
7) answer = [4]


8) cur_price = 2
9) cur_time = 0
10) cur_time = 1
11) cur_time = 2
12) cur_time = 3
13) answer = [4, 3]


14) cur_price = 3
15) cur_time = 0
16) answer = [4, 3, 1]


17) cur_price = 2
18) cur_time = 0
19) cur_time = 1
20) answer = [4, 3, 1, 1]


21) cur_price = 3

22) cur_time = 0
23) answer = [4, 3, 1, 1, 0]

728x90