[프로그래머스] 주식 가격 [스택/큐] [python] Level2

 

문제 설명

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

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

pricesreturn

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

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

구현 및 설계

 

my_solution

def solution(prices):
    for i in range(len(prices)):
        count = 0
        for j in range(i+1,len(prices)):
            count+=1
            if prices[i] > prices[j]:
                break     
        prices[i] = count
    return prices

접근 방식 prices를 순회하며 뒤의 값들과 순서대로 비교한다.

이때 뒤의 값중 자신보다 낮은 값을 발견했을때 비교하는 for문을 끝내고 몇초뒤에 발견했는지 저장하는 방법으로 접근하였다.

 

1. prices를 순회하는 for문을 작성

2. prices를 i+1~n까지 순회하며 count하는 for문을 작성

3. prices[i]와 prices[j]를 비교하여 prices[j]가 더 작을 경우 break

4. count하는 for문이 끝나면 몇초가 지났는지 저장한다.

5. 모든 for문이 끝나면 떨어지지 않은 기간이 저장된 prices리스트를 반환하여 해결!

 

모범 solution

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

나와 같은 방식으로 문제에 접근한 solution이다.

다른 점은 내가 초를 세는데 count를 선언해 사용했다면 이 solution은 answer배열을 선언해 초를 셋다는 점이 있다.

깔끔하게 잘짠 코드이다.

반응형

+ Recent posts