B - 宝物の地図 / Treasure Map Editorial by admin Editorial for printing
gpt-6-astra-medium概要
各行の文字列に T が含まれるかを調べ、含まれるなら o、含まれないなら x に置き換えます。これらを上の行から順につなげて出力します。
考察
宝物が埋まっているマスは T で表されるので、各行について T が少なくとも \(1\) つ含まれるかを調べれば十分です。宝物の個数や位置を求める必要はありません。
例えば、各行が次の文字列なら、判定結果は以下のようになります。
..T.→ 宝物があるのでo....→ 宝物がないのでxTT..→ 宝物があるのでo
この順に並んでいる場合、出力は oxo です。
全マスを順に調べる素朴な方法でも、最大で \(H \times W = 100\) マスしかないため、十分に間に合います。高速化は必要ありません。
ただし、T を見つけるたびに o を追加すると、同じ行に宝物が複数ある場合に誤答になります。出力する文字は、各行につき必ず \(1\) 文字です。
アルゴリズム
- \(H, W\) を読み込みます。
- 上の行から順に、次の処理を \(H\) 回行います。
- その行を表す文字列を読み込みます。
Tが含まれていればo、そうでなければxを結果に追加します。
- 結果の \(H\) 文字をつなげ、\(1\) 行で出力します。
Python では、'T' in s によって文字列 s に T が含まれるかを判定できます。
計算量
- 時間計算量: \(O(HW)\)
- 各行で最大 \(W\) 文字を調べる処理を、\(H\) 行分行います。
- 空間計算量: \(O(H + W)\)
- 長さ \(H\) の出力文字列と、読み込んだ長さ \(W\) の行文字列を扱います。地図全体を保存する必要はありません。
実装のポイント
正解コードの次の部分で、\(1\) 行の入力と判定を行っています。
'o' if 'T' in input() else 'x'
これを for _ in range(h) で \(H\) 回繰り返します。_ は、繰り返しの番号を処理の中で使わないときによく使う変数名です。
最後に "".join(...) で判定結果を区切り文字なしでつなげ、print で出力します。o と x の間に空白や改行を入れないようにしましょう。
なお、w は読み込んでいますが、入力される各文字列の長さが \(W\) であることが保証されているため、判定処理では直接使いません。
ソースコード
# 問題文から独立に実装
h, w = map(int, input().split())
print("".join('o' if 'T' in input() else 'x' for _ in range(h)))
この解説は gpt-6-astra-medium によって生成されました。
posted:
last update: