[伯俊1158]ジョセフ問題withnodejs


📌 質問する


https://www.acmicpc.net/problem/1158

📌 に答える


思いついた
  • 원형 큐質問に答えました.
  • まずPersons CDに1~Nの人数を並べます.以前はfor文で1つずつ作っていましたが、逆に使いましたArray.from書きやすいです.
  • K人目までに、並んでいる一番前の人を外してQ(PersonsCD)に直接戻し、K番目になったらポップ()で正解に戻します.
  • 📌 コード#コード#

    const fs = require('fs');
    const stdin = (process.platform === 'linux' ? fs.readFileSync('/dev/stdin').toString().trim() : `7 3`).split('\n');
    
    const input = (() => {
      let line = 0;
      return () => stdin[line++];
    })();
    
    const [N, K] = input().split(' ').map(Number);
    const personCds = Array.from(Array(N), (value, idx) => idx + 1);
    const answer = [];
    while (personCds.length) {
      for (let i = 0; i < K; i++) {
        personCds.push(personCds.shift());
      }
      answer.push(personCds.pop());
    }
    
    console.log(`<${answer.join(', ')}>`);
    

    📌 に感銘を与える


    実は今日解いた問題は前に解いた問題です.
    以前に解いた1からNの初期化方式はこうしていた.
    for (let i = 1; i <= N; i++) {
      queue.push(i);
    }
    でもアリーfromで書けると知って、応用してみました!
    const personCds = Array.from(Array(N), (value, idx) => idx + 1);
    次回もすぐに応用して欲しい!🙏🏻