paizaの森練習問題コンテスト(2023年2月開催)の過去問
です。
【文字数カウント】コード
reader.on('close', () => {
const m = lines[0];
console.log(m.length); // m の文字数を出力
});
m.length で m の 文字数が取得できました。
【乗客人数】コード
reader.on('close', () => {
const [a, b, c] = lines[0].split(' ').map(Number);
console.log(a - b + c);
});
足し算と引き算は数学記号と同じ…。
【OPS】コード
reader.on('close', () => {
const [b, s] = lines[0].split(' ').map(e => e * 1000);
// ① 入力値を半角スペース区切りの配列に変換 ② 各値✕1000で小数点なしの値に変換
console.log((b + s) / 1000);
});
小数をそのまま演算すると 丸め誤差が発生するので map(e => e * 1000) で [b,s] を 各々1000 倍して から足し合わせています。
【通貨レート】コード
reader.on('close', () => {
const n = Number(lines[0]);
const M = []; // [日, 為替レート] を保存(2次元配列)
for (let i = 1; i <= n; i++) {
const m = Number(lines[i]); // i 日目の為替レート
M.push([i, m]); // [i, m] = [i 日, i 日の為替レート]
}
const S = []; // [1回目の換金日,2回目換金日,2回目のレート-1回目のレート]
for (let i = 0; i < n -1; i++) { // M[i] (1回目の換金)
for (let j = n - 1; j > i; j--) { // M[j] (2回目の換金)
S.push([M[i][0], M[j][0], M[j][1] - M[i][1]]);
// S に 各 [1回目の換金日,2回目換金日,2回目のレート-1回目のレート]を保存
}
}
S.sort((s, b) => s[2] - b[2]); // 2回目のレート-1回目のレート が小さい順に並べ替え
if (S[S.length - 1][2] > 0) { // S[S.length - 1][2] が 0 より大きければ
console.log(S[S.length - 1][0]); // 1回目の換金日を出力
console.log(S[S.length - 1][1]); // 2回目の換金日を出力
} else { // 0以下なら
console.log('No'); // Noを出力
}
});
答えが複数ある場合は換金日が早い方の日付にしないとダメみたいね。
【乗客人数 – その 2】コード
reader.on('close', () => {
const n = Number(lines[0]);
const a = lines[1].split(' ').map(Number);
const b = lines[2].split(' ').map(Number);
const a_s = [0];
const b_s = [0];
const c = [];
for (let i = 0; i < n; i++) {
a_s.push(a_s[i] + a[i]);
b_s.push(b_s[i] + b[i]);
c.push(b_s[i + 1] - a_s[i + 1]);
}
console.log(Math.max(...c));
});
とりあえずup。
【OPS – その 2】コード
reader.on('close', () => {
const n = Number(lines[0]);
let OPS = 0;
let ans = 0;
for (let i = 1; i <= n; i++) {
const [b, s] = lines[i].split(' ').map(e => e * 1000);
const ops = b + s;
if (ops > OPS) {
OPS = ops;
ans = i;
}
}
console.log(ans);
});
とりあえずup。
【タスクスケジューリング】コード
reader.on('close', () => {
const n = Number(lines[0]);
const ST = [];
for (let i = 1; i <= n; i++) {
const [s, t] = lines[i].split(' ').map(Number);
ST.push([s, t]);
}
ST.sort((s, b) => s[1] - b[1]);
let end = ST[0][1];
let ans = 1;
// console.log(end);
for (let i = 1; i < n; i++) {
if (end < ST[i][0]) {
end = ST[i][1];
ans++;
}
}
// console.log(end);
console.log(ans);
});
とりあえずup。
コメント