Algorithm/Programmers

[Python] 주식가격

느낌표 공장장 2021. 4. 22. 23:56
def solution(prices):
    time = [0] * len(prices)
    
    for i in range(len(prices)-1) :
        for j in range(i+1, len(prices)) :
            if prices[i] > prices[j] :
                time[i] += 1
                break
            else :
                time[i] += 1
    return time

풀이

time = [0] * len(prices)

먼저 prices 리스트의 길이만큼의 0으로 채워진 리스트를 만든다.

 

 for i in range(len(prices)-1) :
      for j in range(i+1, len(prices)) :
         if prices[i] > prices[j] :
             time[i] += 1
             break
         else :
             time[i] += 1

1) 처음 for문은 끝까지 돌 필요가 없으므로 len(prices)-1 해준다. (마지막은 그다음 가격이 주어지지 않았으므로 무조건 0) 

2) 두번째 for문은 처음 for문의 i+1 번째부터 시작한다. ( i가 3이면 j는 4부터 반복문 시작)

    ➀ 만약 prices[i] > prices[j] 라면 (다음 값보다 현재(prices[i])값이 더 크다면) time[i]에 1을 더해주고(이미 1초가 지났으므로) 두번째 for문을 종료한다. (처음 for문으로 돌아감) 

    ➁ 그렇지 않다면 ( prices[i]  <= prices[j] 경우), time의 i번째 값에 1을 더한다. 

     ex)  prices = [1, 3, 4, 4, 5, 3] 이고, i=2 (for문을 한번 돈 상태) 라고 한다면, j는 3부터 for문을 시작한다.

            1. time[2] = 4 , time[3] = 4 이므로 else문으로 가서  time[2] = 1 이 된다.

            2. time[2] = 4, time[4] = 5 이므로 else문으로 가서 time[2] = 2가 된다.

            3. time[2] = 4, time[5] = 3 이므로 if문으로 가 time[2] = 3이 되고 반복문을 탈출한다.

 

 

 

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 약수의 합  (0) 2021.04.27
[Python] 시저 암호  (0) 2021.04.26
[Python] 프린터  (0) 2021.04.22
[Python] 다음 큰 숫자  (0) 2021.04.19
[Python] 124 나라의 숫자  (0) 2021.04.18