문제

솔직히 시간 제한만 없으면 간단하게 풀 수 있는 브론즈 문제이다.
const INPUT_FILE = process.platform === "linux" ? "/dev/stdin" : "./inputs.txt";
const inputs = require("fs")
.readFileSync(INPUT_FILE)
.toString()
.trim()
.split("\n");
const n = +inputs[0];
const sheet = [0, ...inputs[1].split(" ").map(Number)];
const questions = inputs.slice(3);
questions.forEach((q) => {
const [x, y] = q.split(" ").map(Number);
let cnt = 0;
for (let i = x; i < y; i++) {
if (sheet[i] > sheet[i + 1]) {
cnt++;
}
}
console.log(cnt);
});

const INPUT_FILE = process.platform === "linux" ? "/dev/stdin" : "./inputs.txt";
const inputs = require("fs")
.readFileSync(INPUT_FILE)
.toString()
.trim()
.split("\n");
const n = +inputs[0];
const sheet = [0, ...inputs[1].split(" ").map(Number)];
const questions = inputs.slice(3);
const dp = new Array(n + 1).fill(0);
let acc = 1;
for (let i = n - 1; i > 0; i--) {
if (sheet[i] > sheet[i + 1]) {
dp[i] += acc;
acc++;
} else {
dp[i] = acc - 1;
}
}
questions.forEach((q) => {
const [x, y] = q.split(" ").map(Number);
console.log(dp[x] - dp[y]);
});
시간을 줄이고자 처음에 해당 i인덱스에서 끝까지 해서 가지는 실수의 수를 기록했다. 이게 dp긴 아닌데,,, 임의의 배열 만들 때는 나도 모르게 dp라는 이름으로 짓게 되는것 같다. 그래서 매 질문마다 계산하는 것이 아니라 처음에 한번 계산한 것을 계속 최대실수의 차이로 출력하도록 했는데 결과는?

이렇게 해도 시간 초과가 뜬다.. 원인을 살펴보니 forEach문으로 매번 출력을 조지는게 문제였던 것 같다.
const INPUT_FILE = process.platform === "linux" ? "/dev/stdin" : "./inputs.txt";
const inputs = require("fs")
.readFileSync(INPUT_FILE)
.toString()
.trim()
.split("\n");
const n = +inputs[0];
const sheet = [0, ...inputs[1].split(" ").map(Number)];
const questions = inputs.slice(3).map((q) => q.split(" ").map(Number));
const dp = new Array(n + 1).fill(0);
let acc = 1;
for (let i = n - 1; i > 0; i--) {
if (sheet[i] > sheet[i + 1]) {
dp[i] += acc;
acc++;
} else {
dp[i] = acc - 1;
}
}
let result = "";
for (const [x, y] of questions) {
result += `${dp[x] - dp[y]}\n`;
}
console.log(result);이래 고치니 또 된다… 킹받네 출력까지 시간을 고려하는건 생각을 못했는데 머리가 띵했다. 앞으로는 출력도 조금 더 빠르게 할 수 있도록 신경을 써야 할 것 같다..