const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const n = input.shift();
const wanted = input.map((item) => +item);
const material = [];
const stack = [];
let result = [];
for (let i = 1; i <= n; i++) {
material.push(i);
}
let pointer = 0;
for (let i = 0; i < material.length; i++) {
stack.push(material[i]);
result.push("+");
while (
stack[stack.length - 1] && // undefined가 나올 수 있어서 확인
stack[stack.length - 1] === wanted[pointer]
) {
stack.pop();
result.push("-");
pointer++;
}
}
if (stack.length) {
console.log("NO");
return;
}
console.log(result.join("\n"));
n개의 숫자를 오름차순으로한 배열이 있으면 그 배열을 stack을 이용하여 입력에 있는 순서로 만들 수 있는지 확인하는 문제이다.
오름차순으로 만든 배열은 material이며 해당 배열을 기준으로 반복문을 실행하여
stack에 순서대로 push 해주고 push 할때마다 요구하는 수열을 만들 수 있는지 while 반복문을 통해 확인했다
이 문제를 처음에 이해하는데 너무 많은 시간이 걸렸다.
문제의 독해력을 길러야겠다고 느꼈다.