[javascript] 백준 2493번 탑

부주용·2023년 2월 5일
0

문제보기

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

const N = Number(input[0]);
const towers = input[1].split(" ").map((value) => +value);

let result = [];
let stack = [];
for (let i = 0; i < N; i++) {
    let current = towers[i]; // 현재 타워의 높이
    if (!stack.length) result.push(0); // 현재 타워 왼쪽에 아무것도 없으면 0을 push
    if (stack.length) {
        let nextStack = []; // 현재 타워 왼쪽에서 비교한 것들을 모아두는 스택
        while (stack.length) {
            let [value, idx] = stack.pop();
            if (value >= current) {
                result.push(idx);
                nextStack.push([value, idx]);
                break;
            }
        }
        if (nextStack.length) { // 왼쪽에서 비교한 타워들이 있으면 stack에 다시 push 해주고 없으면 0을 push
            stack.push(...nextStack);
        } else {
            result.push(0);
        }
    }
    stack.push([current, i + 1]); // 반복문이 한번 돌때마다 현재 타워의 값과 인덱스도 push해준다
}

console.log(result.join(" "));

0개의 댓글