[7/8] 주식가격

이경준·2021년 7월 9일
0

코테

목록 보기
66/140
post-custom-banner

레벨2 문제

내 코드

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

로직

  • 스택/큐 는 어떻게 풀어야할지 생각이 안나서 2중 for문으로 풀었는데 효율성테스트를 통과해서 놀랐다.
  1. 전체 데이터에 대해 for문을 돌린다.
  2. 해당 데이터부터 for문을 한번 더 돌려서, 해당 데이터 이하이면 cnt에 1을 더해준다. 아니면 반복문을 종료한다.
  3. cnt를 answer 리스트에 추가한다.

효율적인 코드

큐 사용

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

피드백

  1. prices를 deque로 만든다.
  2. 첫번째 수를 삭제하고 c로 지정한다.
  3. for문을 돌려서, c보다 크거나 같으면 cnt에 1을 더해준다. c보다 작아지면 cnt에 1을 더해주고 (1초동안 유지되기 때문) 반복문을 끝낸다.
profile
The Show Must Go On
post-custom-banner

0개의 댓글