Algorithm 뽀개기/프로그래머스

[python][프로그래머스] - 주식가격

딸기케잌🍓 2021. 8. 10. 08:58

 

 

내 풀이

def solution(prices):
    answer = []
    prices_len = len(prices)
    answer.append(0)

    for i in range(prices_len-2,-1,-1):
        for j in range(i+1,prices_len):
            price_down = False
            if prices[i] > prices[j]: #가격이 떨어짐
                answer.append(j-i)
                price_down = True
                break
        if price_down == False :
            answer.append(j-i)
    return list(reversed(answer))

예제 처럼 [1,2,3,2,3]이 들어왔을 때 마지막 주식가격(3)은 가격이 떨어지는 시간이 0초 이므로 일단 0을 추가해주고 시작했습니다.

리스트의 인덱스를 가리키는 i와 i보다 1이상 큰 j를 이용하여 price[i] > price[j]라면 주식 가격이 떨어진것이므로 인덱스의 차이(j-i)만큼 초가 흘렀으니 j-i를 answer 리스트에 추가해줍니다.

두번째 for문에서 price[i]가 항상 더 컸다면 한번도 주식 가격이 떨어지지 않은 것이고, 주식이 떨어지지 않은 시간 j-i를 answer 리스트에 추가해줍니다.

 

 

 

다른 사람 풀이

def solution(prices):
    stack = []
    answer = [0] * len(prices)
    for i in range(len(prices)):
        if stack != []:
            while stack != [] and stack[-1][1] > prices[i]:#가격이 떨어짐
                past, _ = stack.pop()
                answer[past] = i - past
        stack.append([i, prices[i]])
    for i, s in stack:
        answer[i] = len(prices) - 1 - i
    return answer

stack은 주식 가격이 처음으로 떨어지는 지점을 아직 못찾은 가격의 index 들을 저장하고 있습니다.

while 문은 stack에 남은 것들이 i번째에 처음으로 가격이 떨어지는가?를 검사합니다.

떨어졌다면 stack 에서 pop처리 후 stack에 저장한 index와 현재 index의 차이만큼 시간이 흘렀다고 여겨 answer에 저장합니다.

마지막 for문에서 stack에 원소가 있다면 한번도 떨어지지 않은 주식가격이므로 전체 (prices 길이-1)에서 stack의 인덱스만큼 빼주어(가격이 떨어지지 않은 초 시간) answer에 저장합니다.

 

스택에 주식가격의 인덱스를 저장하기가 뽀인트 발상이였네용