paizaの森練習問題コンテスト過去問題16

paizaの森練習問題コンテスト(2024年8月開催)の過去問です。

【3つの数】コード

console.log(3);
console.log(2);
console.log(1);
hogeちゃんの画像

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;
   }
});
hogeちゃんの画像

消費税 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');
});
hogeちゃんの画像

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);
});
hogeちゃんの画像
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(''));
});
hogeちゃんの画像

文字列を一文字ごとの配列に変換し 辞書順に並替え。末尾の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);
});
hogeちゃんの画像

Set() は 値と 添字が同値なので 値の追加と削除がシンプルに行えますが lengthプロパティがないので ループ処理を行う前に 値を展開して配列Member に保存しました。

コメント