FrontEnd/프로그래머스

[JS] 주식 가격

728x90

배열의 길이가 10만개나 되기 때문에 이중 반복문을 활용하면 시간초과가 걸릴 것 같은 문제였다.

 

처음에 조금 고민을 하다가. 결국 내려갔는지 올라갔는지 스택을 활용하면 조금 더 쉽게 판별할 수 있을거란 생각이 들었다.

 

 

반복문을 통해서 i가 시간이라고 생각을 했다. 만약 스택에 값을 집어넣어야할때 그당시의 i값을 같이 스택에 넣는다면, 이후에 값이 떨어졌다고 판단될때 의 i값과 스택에 넣었을때의 i값을 비교한다면 몇초만에 값이 떨어진지 확인할 수 있다.

 

또한 스택에 넣을때 i값을 기록하기에 정답 배열에 값을 넣는것도 수월했다.

 

미리 prices길이만큼 0으로찬 배열을 만들고 그 배열에서 값을 넣는식으로 식을 세웠다.

 

 

 

function solution(prices) {
    const stk = []
    const ret = new Array(prices).fill(0)
    
    for (let i = 0 ; i < prices.length ; i ++) {
        
        while(stk.length && stk[stk.length-1][0] > prices[i]){
            const [p,idx] = stk.pop()
            ret[idx] = i - idx
        }
        stk.push([prices[i],i])
    }
    
    while (stk.length){
        const [p,idx] = stk.pop()
        ret[idx] = prices.length-1-idx
    }
    return ret
    
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 최솟값 만들기  (0) 2023.07.28
[JS] 전화번호 목록  (0) 2023.07.28
[JS] 더 맵게!  (0) 2023.07.27
[JS] 하노이의 탑  (0) 2023.07.22
[JS] N-Queen  (0) 2023.07.21