제주 탈출 일지

[python3] 프로그래머스 레벨 2 - 주식가격 본문

코딩 테스트

[python3] 프로그래머스 레벨 2 - 주식가격

귀건 2021. 6. 18. 02:10
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/42584?language=python3 

 

코딩테스트 연습 - 주식가격

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

programmers.co.kr

 

# 최종 답안

def solution(prices):
    answer = [0] * len(prices)
    
    stack = []
    
    timeLine = {}
    
    time = len(prices)
    for i in enumerate(prices):
        stack.append(i)

    for i in range(len(stack)):
        tmp = []
        for j in range(i, len(stack)):
            if stack[i][1] > stack[j][1] :
                tmp.append(j)
                break
        timeLine.setdefault(i,tmp)
        
    for i in range(len(stack)):
        # 가격이 떨어진 것이 있다면?
        if timeLine[i] != [] :
            answer[stack[i][0]] = timeLine[i][0] - i
        
        # 마지막 원소는 떨어지지 않았음.
        elif i == len(stack) - 1:
            answer[stack[i][0]] = 0
        
        # 가격이 떨어지지 않았다면?
        else : answer[stack[i][0]] = time - stack[i][0] - 1  
    
    
    return answer

 

1. 첫번째 for문으로 (index, value)로 이루어진 prices를 구함..

2. 이 stack을 이용해서 특정 인덱스 이후에 값이 떨어지는 지 체크하는데, 한번까지만 체크하면 되므로 만약 떨어지는 값이 있다면 바로 break

3. 모든 인덱스에 대해서 떨어지는지 떨어지지 않는지 확인했으니, 경우의 수에 따라 답안을 구함.

 

- 가격이 떨어진 것이 있는가 ? 

 timeLine 딕셔너리의 값과 index의 차로 answer를 설정

- 마지막 원소인가?

마지막원소는 떨어질 가격이 없으므로 0

- 가격이 떨어지지 않았다면?

len(prices) - 인덱스 - 1( 이때, -1 해주는 이유는 1번째부터 시작하는데 인덱스는 0부터 시작하기 때문, 1을 더 빼줘야 함.)

 

다른 사람의 풀이

1. 리스트를 끝에서부터 반복시키고 싶을 때 for i in stack[::-1] 과 같은 형태로 사용. 

728x90
반응형
Comments