Supership VPoEの名畑です。
趣味で競プロやっています。
アルゴリズム実技検定(PAST)の過去問題解答例シリーズです。アルゴリズム実技検定(PAST) 第11回 E問題 Python解答例(二分探索)の続きです。
今回は第11回のF問題の私の解答例(Python3)を公開します。
ちなみにA問題からF問題までの合計点が46点なので、ここまで来れば初級(45点)ですね。
高橋様のつぶやき(2019年時点)によるとAtCoderでは茶色相当ってことになります。
そもそもアルゴリズム実技検定ってなんですか? という方はアルゴリズム実技検定(PAST)について 並びに 第11回A〜C問題 Python解答例をご覧いただけますと幸いです。
第11回の過去問題全部
第11回 F問題 シューティングゲーム(7点)
問題
言語
- Python (3.8.2)
解答例
H, W = map(int, input().split())
s = [list(map(int, input().split())) for _ in range(H)]
N = int(input())
for i in range(N):
# rとcの入力。sが0始まりなので1減らしている。
r, c = map(int, input().split())
r -= 1
c -= 1
# ブロックマスなら上位(行番号が小さい)マスを一つずつ下ろす
if s[r][c] > 0:
for j in range(r - 1, -1, -1):
s[j + 1][c] = s[j][c]
s[0][c] = 0 # 最上位を空マスにする
# 結果出力
for i in range(H):
print(*s[i])
最初は空中ブロックがないという条件なので、撃たれたマスの上位を一つずつ順番に見れば網羅できる。
jのループは途中で空マスが見つかればそこで抜けても良いのですが、Hが100以下とかなり小さいので処理継続させています。
最後に宣伝
SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。
Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。
是非ともよろしくお願いいたします。