소소한 컴퓨터 이야기

주식가격

by Cori

문제

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

solution 함수를 완성하세요. 

 

제한사항

· prices의 각 가격은 1이상 10,000이하인 자연수입니다.

· prices의 길이는 2이상 100,000이하입니다. 

 

입출력 예 

prices return
[1, 2, 3, 2 3] [4, 3, 1, 1, 0]

풀이

1. Me

def solution(prices):
    answer = []
    reversed_p = list(map(int, reversed(prices)))
    time_cnt = []
    # print(t)
    # print(reversed_p)
    
    for _ in range(len(prices)):
        t = reversed_p.pop()
        for i in range(len(reversed_p)):        
            print(reversed_p[-(i+1)])
            if reversed_p[-(i+1)] >= t:
                time_cnt.append(reversed_p[-(i+1)])
            else:
                break
    
    return answer

머리가 잘 안 돌아간다. . 문제의 카테고리가 스택 / 큐에 있다고 해서 굳이 pop, remove 사용하려 하지 말자 

 

2. Others

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

answer을 [0] * len(prices) 배열로 선언하고, 배열을 탐색하며 값이 떨어지지 않았을 경우 해당 인덱스에 +1을 해줌. 탐색하며 값이 떨어지는 경우 break를 통해 반복문을 빠져나간다. 반복문에도 answer[i] += 1 구문이 있는데, 이는 다음 인덱스 값을 탐색하며 소모된 1초를 표시해주기 위함이다.

from collections import deque
def solution(prices):
    answer = []
    prices = deque(prices)
    while prices:
        c = prices.popleft()
        count = 0
        for i in prices:
            if c > i:
                count += 1
                break
            count += 1

        answer.append(count)
    return answer

큐를 이용해 문제를 해결하였다. prices 배열에 요소가 남아있는 동안, popleft 함수를 이용해 왼쪽에서 값을 제거하고, 그 이후는 위와 같은 로직으로 값을 구한다. 

'CS > Coding Test' 카테고리의 다른 글

JadenCase 문자열 만들기  (0) 2021.08.31
N개의 최소공배수  (0) 2021.08.30
다리를 지나는 트럭  (0) 2021.08.25
비밀지도  (0) 2021.08.24
완주하지 못한 선수  (0) 2021.08.24

블로그의 정보

코딩하는 오리

Cori

활동하기