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 |