인덱스를 저장할 스택을 따로 설정해주고, numbers를 돌면서, stack의 마지막 원소의 인덱스에 해당하는 numbers의 값을 data와 비교한다. data보다 값이 작으면, numbers[stack.pop한 인덱스]의 값을 data로 바꿔주면 된다.
function solution(numbers) {
var answer = new Array(numbers.length).fill(-1)
var stack = [];
numbers.map((data,idx)=>{
while(stack && numbers[stack.at(-1)] < data){
answer[stack.pop()] = data;
}
stack.push(idx);
})
return answer;
}
알고리즘 자체는 쉽고, 시간복잡도와의 싸움이다. O(n)도 시간 초과가 뜨는데, 어떻게 전체를 다 돌지않고, 큰 수를 찾을 수 있을까? 가 최대 의문점이였다. stack을 이용하여, 해쉬테이블을 작성하면 훨씬 빠른 속도로 해결할 수 있음을 알게되었다.