본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 17298 오큰수 (Javascript)

by Cafe Mocha 2023. 1. 28.

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


알고리즘 : 구현

 

그냥 문제를 풀면 시간초과와 메모리 초과가 발생해 stack을 활용해서 풀었다.

 

let input = require("fs")
  .readFileSync("input.txt") //"/dev/stdin"
  .toString()
  .split("\n")
  .map((val) => val.trim());

let n = +input.shift();

let nums = input.shift().split(" ").map(v=>+v);

function solution() {

  let ans = [];
  let stk = [];

  for(let i=n-1;i>=0;i--){
    
    if(!stk.length) {
      stk.push(nums[i]);
      ans.push(-1);
      continue;
    }
    while (stk.at(-1) <= nums[i]) {
      stk.pop();
    }
    if (!stk.length) {
      ans.push(-1);
      stk.push(nums[i]);
    } else {
      ans.push(stk.at(-1));
      stk.push(nums[i]);
    }
    }
  
  console.log(ans.reverse().join(" "));
}

solution();