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

현재 자바스크립트는 풀이 가능 언어에 없습니다.

문제

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

 

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

 

입출력 예
  • [1, 2, 3, 2, 3] -> [4, 3, 1, 1, 0]
  • [5, 8, 6, 2, 4, 1] -> [3, 1, 1, 2, 1, 0]

 

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

 

문제 해결 방법

  • 문제의 취지는 스택을 통한 풀이이지만, 이중 for문으로도 정확성 및 효율성 통과되었습니다. (자바, 파이썬3)
  • 마지막 원소를 제외한 모든 원소에 시작시간 1초를 부여합니다. 마지막 원소는 이후 진행 시점이 없으므로 0이 되어야 합니다.
  • 첫 번째 for문에서, 특정 원소의 가격이 그 다음 시간의 가격보다 작다면 그대로 다음 반복을 진행합니다.
  • 특정 원소의 가격보다 그 다음 시간의 가격이 같거나 크다면 두 번째 for문을 진행합니다.
  • 특정 원소의 가격보다 낮아지는 구간이 나타날 때 까지 시간을 1 증가시킵니다. 낮아지는 구간이 나타난다면 break 하고 진행합니다.

 

코드

function solution(prices) {
    let answer = new Array(prices.length).fill(0)
    
    for(let i = 0, len = prices.length - 1; i < len; i++) {
        answer[i] = 1
        if(prices[i] <= prices[i + 1]) {
            for(let j = i + 1; j < len; j++) {
                if(prices[i] > prices[j])   break
                else    answer[i] += 1
            }
        }
    }
    return answer
}

 

참고 – Python3

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

문의 | 코멘트 또는 yoonbumtae@gmail.com  donaricano-btn

카테고리: 코딩테스트

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다