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?

神経衰弱を解くために:part3

Posted at

今回は paizaの「神経衰弱を解くために:part3」の問題に挑戦!


問題概要

〇 盤面情報

  • H 行 × W 列のカードのグリッドがある
  • 各カードには数字 1~13 が書かれており、同じ数字は 2 枚または 4 枚存在する
  • 例: 4×3 のグリッドなら 12 枚カードが並ぶ

〇 プレイヤー情報

  • N 人でゲームを行う
  • 実際のプレイヤー操作は不要(今回は入力として誰がめくったかは関係なし)

〇 操作記録

  • L 回の操作(カードを 2 枚めくる)を時系列順に受け取る
  • 1 回の操作は (a_i, b_i, A_i, B_i) で表され、a_ib_i 列と、 A_iB_i 列のカードがめくられたことを示す
  • 行・列は 1 始まり

〇 出力

  • 各操作ごとに、めくった 2 枚の数字が同じなら YES、違うなら NO
  • L 行の出力



入力例:

4 3 2
5 7 8
12 9 8
5 9 8
7 12 8
4
1 3 4 1
1 3 3 3
1 1 1 2
1 2 2 2

出力例:

NO
YES
NO
NO






✅OK例:

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

const lines = [];

rl.on('line', (input) => lines.push(input));

rl.on('close', () => {
    const [H, W, N] = lines[0].split(' ').map(Number);
    const cardsGrid = lines.slice(1, H+1).map(line => line.split(' ').map(Number));
    const L = lines[H+1];
    const logs = lines.slice(H+2).map(line => line.split(' ').map(Number));
    
    for (let i = 0; i < L; i++) {
        const [a, b, A, B] = logs[i];
        
        if (cardsGrid[a-1][b-1] === cardsGrid[A-1][B-1]) {
            console.log('YES');
        } else {
            console.log('NO');
        }
    }
});
  • 初期情報の取得
    • lines[0] から H(行数)、W(列数)、N(プレイヤー数)を取得

  • カード盤面の格納
    • lines[1] から lines[H] までを 2 次元配列 cardsGrid に変換
    • 各要素を数値に変換 (map(Number))

  • 操作ログの取得
    • lines[H+1]L(操作回数)を取得
    • lines[H+2] 以降を logs 配列に変換
    • 各行を数値配列 [a,b,A,B] に変換

  • 操作ログの処理
    • L 回ループして、各操作 [a,b,A,B] を取得
    • 対応するカードを cardsGrid[a-1][b-1]cardsGrid[A-1][B-1] で比較

  • 結果出力
    • 数字が同じなら YES、違うなら NO をコンソール出力
    • 順番通りに L 行出力



入力例:

4 3 2           // H=4, W=3, N=2
5 7 8
12 9 8
5 9 8
7 12 8
4               // L=4
1 3 4 1
1 3 3 3
1 1 1 2
1 2 2 2

cardsGrid

[
 [5, 7, 8],
 [12,9,8],
 [5, 9, 8],
 [7,12,8]
]
  • 1回目 (1,3,4,1) → 1行3列は 8、4行1列は 7NO
  • 2回目 (1,3,3,3) → 1行3列は 8、3行3列は 8YES
  • 3回目 (1,1,1,2) → 1行1列は 5、1行2列は 7NO
  • 4回目 (1,2,2,2) → 1行2列は 7、2行2列は 9NO






📝まとめ


  • 配列の使い方
    • 入力は 2 次元配列 cardsGrid[row][col] に格納
    • 行・列のインデックスが 1 始まりなので、参照時は -1 する

  • ログ処理
    • 各ログ [a,b,A,B] で対応するカードを比較
    • === で同じなら YES、違えば NO

- 出力ルール - 出力は `L` 行、順番通り
  • ポイント
    • 配列のインデックスずれに注意




僕の失敗談(´;ω;`)と解決法🐈

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?