[Programmers] 주식 가격

김가영·2021년 1월 25일
0

Algorithm

목록 보기
27/78

문제 바로가기

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

내 풀이

바로 for 문 돌려버렸다.

끝까지 주식 가격이 떨어지지 않은 경우만 추가로 고려하였다.

다른 사람 풀이

stack 을 이용했다.

def solution(p):

    # 답을 넣을 ans 배열
    ans = [0] * len(p)
    
    # index를 하나씩 넣어준다.
    stack = [0]
    for i in range(1, len(p)):
        # 만약 stack 마지막 값보다 현재 index 의 주식 가격이 적으면
        if p[i] < p[stack[-1]]:
            # stack 을 역으로 돌면서
            for j in stack[::-1]:
                # 값이 처음으로 떨어진 가격들에 대하여 시간을 계산하여 answer 에 넣어준다. 
                # 값이 떨어진 index 는 stack 에서 제거한다.
                if p[i] < p[j]:
                    ans[j] = i-j
                    stack.remove(j)
                else:
                    break
        stack.append(i)
    # 아직까지 stack 에 남아있는 값들은 마지막까지 값이 떨어지지 않은 주식가격들. 이를 계산하여 ans 에 넣어준다.
    for i in range(0, len(stack)-1):
        ans[stack[i]] = len(p) - stack[i] - 1
    return ans

항상 for 문을 돌며 현재 idx의 주식가격보다 높은 애들을 없애준다. 즉, stack 에 있는 idx 는 그 시점보다 주식가격이 낮거나 같은 idx 들만 존재한다.

profile
개발블로그

0개의 댓글