본문 바로가기

Programming/Python

[프로그래머스] 스택/큐 - 주식가격 (Python3, 파이썬)

문제

prices 리스트에서 가격이 떨어지지 않은 기간을 각 항목마다 구해 return해줘야 한다.

바로 다음에 가격이 떨어지면 1초간 가격이 떨어지지 않은 것이다.

 

코드

1. 효율성 0점으로 통과되지 못한 코드

def solution(prices):
    answer = []
    while prices:
        current = prices.pop(0)
        time = 0
        for v in prices:
            if current > v:
                time+=1
                break
            else:
                time+=1          
        answer.append(time)
        
    return answer

while과 for이 둘 다 쓰여 시간 초과가 발생한 것으로 예상된다.

for 2번인 코드로 바꿔보자.

 

2. 통과한 코드

def solution(prices):
    answer = [0] * len(prices)
    for i in range(len(prices) - 1):
        for j in range(i + 1, len(prices)):
            answer[i] += 1
            if prices[i] > prices[j]: 
                break
    return answer

 

코드를 짧게 설명해보자면 0이 prices 리스트의 크기만큼 들어있는 answer 배열을 선언한다.

첫번째 for문으로 처음부터 마지막 앞 인덱스까지 반복한다.

두번째 for문은 두번째 인덱스부터 마지막 인덱스까지 반복한다.

i인덱스의 값과 j인덱스의 값을 비교하여 j의 값이 작을 경우 break로 탈출한다.