AtCoder Beginner Contest 096 C問題
競技プログラミングで使える関数を実際の問題を通して紹介いたします。
今回は「文字*数字」です。
文字を指定の数だけ繰り返す
この問題を解く中で「'.'*数字」という組み合わせを使用します。
これは文字*数字という処理を行うことによって文字の繰り返しをすることができます。
例えばこのような感じ。
"a"という文字に「5」をかけると出力結果は"aaaaa"となります。これを利用し、問題を解きます。
#空白を区切り文字として入力値を変数に格納 H,W=map(int,input().split()) #今回の問題では指定行番号・列番号の上下の値を参照するので #本来ない文字列['."*(W+2)]を加えることにより異常参照の発生をなくしている。 C=['.'*(W+2)]+['.'+input()+'.'for _ in[0]*H]+['.'*(W+2)] #range(下限,上限)は、(下限)以上(上限)未満の範囲となるのでH+1,W+1とする for i in range(1,H+1): for j in range(1,W+1): #上下に'#'がいなければ、C[i,j]は黒く塗られない if C[i][j]=='#'and'#'not in[C[i-1][j], C[i][j-1], C[i][j+1], C[i+1][j]]: print('No') exit() print('Yes')
C=['.'*(W+2)]+['.'+input()+'.'for _ in[0]*H]+['.'*(W+2)]
この表現は初めて見たので試します。
まず
["."*(5)]
とすると出力結果は、
Out[1]: ['.....']
文字列×数字でその文字列を繰り返すことができる。
そして次に
['.'+input()+'.'for _ in[0]*H]+['.'*(W+2)]
入力値を'.'と'.'×H(行)分+'.'*(W+2)で挟む。
ここで
for _ in[0]*H
は先ほどと同じ発想で[0]としているのはHは整数型であり、配列として加えることができないためです。
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者: コーリー・アルソフ,清水川貴之監訳,清水川貴之,新木雅也
- 出版社/メーカー: 日経BP社
- 発売日: 2018/02/24
- メディア: 単行本
- この商品を含むブログ (2件) を見る