[백준/node.js] 17298 오큰수

김민지·2022년 7월 30일
0

https://www.acmicpc.net/problem/17298

스택을 활용하는 문제였는데.. 그냥 무시하고 반복문으로 한번 풀어봤는데 시간초과가 떴다.

스택 사용한 풀이

입력받은 숫자들을 순회하면서 스택의 top이 가리키는 숫자보다 크면 pop 해서 오큰수를 현재 숫자로 바꾼다.

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
n = input[0];
let numbers = input[1].split(' ');
numbers = numbers.map((x) => Number(x));
const stack = [];

for (let i = 0; i < numbers.length; i++) {
  while (stack.length && numbers[stack[stack.length - 1]] < numbers[i]) {
    numbers[stack.pop()] = numbers[i];
  }
  stack.push(i);
}

while (stack.length) {
  numbers[stack.pop()] = -1;
}

console.log(numbers.join(' '));

0개의 댓글