Level 2. 주식가격

Pear_Mh·2021년 7월 28일
0

Programmers-Level 2.

목록 보기
39/40

주식가격

코딩테스트 연습 > 스택/큐 > 주식가격

https://programmers.co.kr/learn/courses/30/lessons/42584



문제 구상

  • 입력: step 단위의 value 리스트
  • 구상(1): deque()사용
    1. list의 원소를 popleft()하여 해당 값이 나머지 리스트의 원소보다 클 경우 cnt=1, break 하고, cnt+=1을 추가로 수행
    2. cnt값들을 빈 리스트에 삽입하여 출력
  • 구상(2): 이중 for문 이용
    1. 0 부터 len(list()-1)까지의 위치값을 가지는 리스트의 원소값 중, i부터 len(list()-1)까지의 위치값을 가지는 원소값보다 작을 경우 +=1(본인 원소 포함)
    2. 사전에 만들어 둔 len(list)길이의 빈 리스트에 삽입하여 출력

문제 풀이

첫번째 풀이: deque()

from collections import deque

prices = [1,2,3,2,3]

result = [] # Set initial vlaue
price = deque(prices) # Transform list to deque
while price:
    cnt = 0 # Set local value
    p1 = price.popleft() # pop first element
    for p in price:
        if p1 > p:
            cnt = 1 # Count 1
            break
        cnt += 1
    result.append(cnt)

두번째 풀이: 이중 for문

prices = [1,2,3,2,3]

result = [0] * len(prices) # Set initial value
for i in range(len(prices)-1):
    for j in range(i,len(prices)-1):
        if prices[i] > prices[j]:
            break
        else:
            result[i] += 1

전체 코드

Deque()

from collections import deque

def solution(prices):
    result = []
    price = deque(prices)
    while price:
        cnt = 0
        p1 = price.popleft()
        for p in price:
            if p1>p:
                cnt += 1
                break
            cnt+=1
        result.append(cnt)
    return result

prices = [1,2,3,2,3]
solution(prices)

이중 for문

def solution(prices):
    result = [0] * len(prices) # Make initial array

    for i in range(len(prices)-1):
        for j in range(i, len(prices)-1):
            if prices[i] >prices[j]:
                break
            else:
                result[i] +=1
    return result

prices = [1,2,3,2,3]
solution(prices)
profile
Beyond the new era.

0개의 댓글

관련 채용 정보