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?

迷路判定!実は文字列はインデックスでアクセス可能!2次元配列使わない!

Posted at

迷路のマスが #. か見るだけの問題で、僕がまさかの 迷路に迷った件について話す!


🧩 問題内容(超ざっくり)

H×Wマスの迷路があり、rc列のマスが「#(壁)」かどうか判定せよ!


入力例:

3 4 1 2  // H,W,r,c
..#.
#.##
....

このとき、1行目の2文字目は . なので答えは No!


🔥 始めのコード(NG)

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

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

rl.on('close',()=>{
    const[H,W,r,c] = lines[0].split(' ').map(Number);
    const maze = lines.slice(1).map(a => a.split(' ')); // ❌

    if(maze[r][c] === "#"){  //❌
        console.log("Yes");
    } else {
        console.log("No");
    }
});

🙅‍♂️ NGポイント

  • split(' ') の誤用: 迷路の行を分割しようとしたけど、スペースがないので、すべて1要素の配列に。
  • インデックスのズレ: rc は 1始まり なのに、そのまま使っていたため、ズレが生じた。


✅ 修正コード(OK)

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

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

rl.on('close', () => {
    const [H, W, r, c] = lines[0].split(' ').map(Number);
    const maze = lines.slice(1); // 文字列の配列でOK

    if (maze[r - 1][c - 1] === "#") {  // インデックス修正
        console.log("Yes");
    } else {
        console.log("No");
    }
});

🧠 解説

  • 文字列へのアクセス: JavaScriptでは文字列も配列のようにインデックスでアクセスできる。そのため、maze[r-1][c-1] と書くだけで、指定した行・列のマスにアクセス可能。

💡 迷路の2次元配列化

もし迷路を完全な2次元配列として使いたい場合は、次のようにすることもできる。

const maze = lines.slice(1).map(line => line.split(''));

この方法では、各行が配列になるが、今回の問題では読み取りだけなので、最初のように文字列のままで使うのがベターかも。


🏁 まとめ

✅文字列へのアクセスはインデックスでできるから、split('') は不要!

✅1 始まり → 0 始まり のインデックス補正を忘れずに。



僕の失敗談(´;ω;`)🚀

0
0
1

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?