Algorithm/BOJ

[알고리즘/백준/17298] 오큰수

개발자 김비숑 2023. 5. 26. 23:29
반응형

문제


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

 

17298번: 오큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

 

 

풀이


const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
function sol(n, arr) {
  let res = new Array(n).fill(-1); // 배열 모두 -1로 초기화

  stack = [];
  for (let i = 0; i < arr.length; i++) {
    let cur = arr[i];
		// 스택 내 요소가 있고, 마지막 요소보다 현재 숫자가 크면 마지막 요소의 오큰수는 현재 숫자 
    while (stack.length && stack.at(-1)[1] < cur) { 
      res[stack.pop()[0]] = cur;
    }
    stack.push([i, cur]);
  }
  return res.join(" ");
}

let arr = input[1].split(" ").map((item) => +item);
console.log(sol(+input[0], arr));

스택에 쌓아둔 값보다 현재 숫자값이 더 크면 현재 숫자값이 오큰수가 된다.

따라서 스택 내에서 현재 값보다 작은 값들은 모두 pop하고 result[pop한 요소의 idx] = 현재 값으로 넣어준다.

반응형