😊

AtCoder Beginner Contest 351 B - Spot the Difference 覚書き

2024/04/29に公開

PHPで解答を作成しています。

問題のリンク
https://atcoder.jp/contests/abc351/tasks/abc351_b

解のポイント

gridA[i][$j] の解説

PHPにおいて、文字列は文字配列として扱うことができます。つまり、文字列に対して添字を用いることで、その位置の文字にアクセスすることが可能です。

$gridAの配列の一例

Array
(
    [0] => abc
    [1] => def
    [2] => ghi
)

例えば、$gridA[0][1] であれば
indexの0番目、1なので前から2番目の文字列をさす。

出力するときは
座標が1からスタートするため、それに合わせて補正するためプラス1を行う。

そのため
echo (i + 1) . " " . (j + 1) . PHP_EOL;
となる。

使用する関数/演算子

特段なし

全体コード

<?php

// 標準入力からNを読み込む
$N = intval(trim(fgets(STDIN)));

// グリッドAを読み込む
$gridA = [];
for ($i = 0; $i < $N; $i++) {
    $gridA[] = trim(fgets(STDIN));
}

// グリッドBを読み込む
$gridB = [];
for ($i = 0; $i < $N; $i++) {
    $gridB[] = trim(fgets(STDIN));
}

// 2つのグリッドを比較して異なる文字がある座標を見つける
for ($i = 0; $i < $N; $i++) {
    for ($j = 0; $j < $N; $j++) {
        if ($gridA[$i][$j] != $gridB[$i][$j]) {
            // 1-indexedの座標で出力
            echo ($i + 1) . " " . ($j + 1) . PHP_EOL;
            break 2;  // 異なる座標を見つけたらループを抜ける
        }
    }
}

Discussion