0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今回は paiza の「数列並べ」の問題に挑戦!


🧩 問題概要

  • 整数からなる 数列 A が与えられる
  • Q 個のクエリが順番に与えられる
  • 各クエリは
    • i j という形
    • A_iA_j の値を入れ替える操作を表す
  • クエリは 順番通りに処理する
  • すべてのクエリを処理し終えたあとの最終的な数列 A を出力する

📥 入力

  • 1行目:数列の長さ N
  • 2行目:数列 A_1 A_2 ... A_N
  • 3行目:クエリの数 Q
  • 4行目以降:
    • 各行に i j(入れ替える位置)

📤 出力

  • すべてのクエリ処理後の数列を出力する。
    • 空白区切り
    • 1行



入力例:

5
1 2 3 4 5
1
1 4

出力例:

4 2 3 1 5






✅ OK例:

const rl = require('readline').createInterface({ input: process.stdin });

const lines = [];
rl.on('line', line => lines.push(line));

rl.on('close', () => {
    const N = Number(lines[0]);
    const arrA = lines[1].split(' ').map(Number);
    const Q = Number(lines[2]);
    const query = lines.slice(3).map(q => q.split(' ').map(Number));
    
    for (let i = 0; i < Q; i++) {
        const [a, b] = query[i];
        
        // 入れ替え前を記録
        const A = arrA[a-1];
        const B = arrA[b-1];
        
        // 入れ替え
        arrA[a-1] = B;
        arrA[b-1] = A;
    }
    
    // 結果を出力
    console.log(arrA.join(' '));
});

🔍 コードの流れ

  • 標準入力を1行ずつ読み取り、配列 lines に保存する
  • 入力がすべて読み終わったら close が呼ばれる
  • 1行目から 数列の長さ N を取得
  • 2行目から 数列 A を配列として取得
  • 3行目から クエリ数 Q を取得
  • 4行目以降から 入れ替えクエリ (a, b) を配列として取得
  • クエリを1つずつ処理する
    • 指定された位置 ab の要素を入れ替える(1始まりなので -1 する)
  • すべてのクエリ処理後の数列を 空白区切りで出力する




✨ 分割代入で入れ替え

[arrA[a-1], arrA[b-1]] = [arrA[b-1], arrA[a-1]];






🗒️ まとめ

  • 配列の要素を指定の位置で操作する問題。
  • 1-indexed ⇔ 0-indexedに注意。
  • 変数を使った入れ替えと、分割代入による簡潔な入れ替えの書き方がある。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?