paizaの森練習問題コンテスト(2024年8月開催)の過去問
です。
【3つの数】コード
console.log(3);
console.log(2);
console.log(1);
console.log() で数値を出力。
【税込価格】コード
reader.on('close', () => {
const [p, s] = lines;
switch (s) {
case 'T':
console.log(Math.floor(p * 1.1));
break;
case 'E':
console.log(Math.floor(p * 1.08));
break;
}
});
消費税 10% と 8%。小数点以下は切り捨てなので Math.floor()。
【パターン検出】コード
reader.on('close', () => {
const T = lines.pop();
const N = Number(lines.shift());
let ans = false;
for (let i = 0; i < N; i++) {
const S = lines.shift();
if (T.includes(S)) {
ans = true;
break;
}
}
console.log(ans ? 'Yes' : 'No');
});
ans を false で初期化して T に S が含まれていれば true で上書きしました。
【連続ホームラン】コード
reader.on('close', () => {
const [n, m] = lines[0].split(' ').map(Number);
let ans = 1;
for(let i = 0;i < m;i++){
ans /= n;
}
console.log(ans);
});
ans を1で初期化して ホームランを打つのに要する打席数で m 回割り算しました。
【辞書順で 3 番目に小さい文字列】コード
reader.on('close', () => {
const n = Number(lines[0]);
const s = lines[1].split('');
s.sort();
const t = s.splice(n - 3, 3);
[t[0], t[1], t[2]] = [t[1], t[0], t[2]];
console.log([...s, ...t].join(''));
});
文字列を一文字ごとの配列に変換し 辞書順に並替え。末尾の3文字を切り取って 辞書順で3番めになるように並替えてから 元の位置に戻して出力しました。
【村人の友好関係(easy) 】コード
reader.on('close', () => {
const [N, M, Q] = lines.shift().split(' ').map(Number);
const friendship = new Array(N + 1).fill(0);
const member = new Set();
let ans = 0;
for (let i = 0; i < M; i++) {
const [a, b, f] = lines.shift().split(' ').map(Number);
friendship[a] = Math.max(friendship[a], f);
friendship[b] = Math.max(friendship[b], f);
}
for (let i = 0; i < Q; i++) {
const [op, q] = lines.shift().split(' ');
switch (op) {
case '+':
member.add(Number(q));
break;
case '-':
member.delete(Number(q));
break;
}
}
const Member = [...member];
const l = Member.length;
if (l !== N || l !== 0) {
for (let i = 0; i < l; i++) {
ans = Math.max(ans, friendship[Member[i]]);
}
}
console.log(ans);
});
Set() は 値と 添字が同値なので 値の追加と削除がシンプルに行えますが lengthプロパティがないので ループ処理を行う前に 値を展開して配列Member に保存しました。
コメント