[백준] 17298 오큰수 - javascript

Yongwoo Cho·2021년 10월 21일
0

알고리즘

목록 보기
22/104

📌 문제

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

📌 풀이

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");

let n = Number(input[0]);
let arr = new Array(n);
arr = input[1].split(" ").map(Number);
let ans = new Array(n);
let stack = [];
for (let i = n - 1; i >= 0; i--) {
  while (stack.length !== 0) {
    let v = stack.pop();
    if (v > arr[i]) {
      ans[i] = v;
      stack.push(v);
      stack.push(arr[i]);
      break;
    }
  }
  if (stack.length === 0) {
    ans[i] = -1;
    stack.push(arr[i]);
  }
}
console.log(ans.join(" "));

✔ 알고리즘 : 스택

✔ 배열의 뒤에서 부터 스택에 집어넣는다

✔ stack에 아무것도 없으면 ans에 -1 저장후 push

✔ stack의 top이랑 비교해서 큰값을 찾을때까지 pop 하여 ans에 v저장

✔ 큰것을 찾으면 push v 후 push arr[i]

✔ 난이도 : 백준 기준 골드 4

profile
Frontend 개발자입니다 😎

0개의 댓글