見出し画像

[ABC280 Python]デンソークリエイトプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 280)A~C問題Python解説

A問題

H, w = map(int, input().split())
ans = 0
for i in range(H):
    s = list(input())
    ans += s.count("#")
print(ans)

問題文のとおりH×Wのマス目から、
"#"のマスを探しましょう。

上から順に入力されたマスを見ていき、
"#"の個数を数えていきます。
その個数を解答ansに加えていくことで
最終的に"#"の総個数を算出できます。

B問題

N = int(input())
S = list(map(int, input().split()))

ans = []
c = 0
for i in range(N):
    ans.append(S[i]-c)
    c = S[i]
print(*ans)

問題文が少しわかりづらいですが、
入力例1を見ると内容が分かりやすいです。

A1,A2,A3を求めていく訳ですが、
出力例1を見ると、
A1 = S1
A2 = S2-A1
A3 = S3-A2
と式変形できます。

この式変形をプログラムに直すと、
上記のようになります。
作成したAiを変数cに保存しておけば大丈夫です。

C問題

from collections import deque

S = deque(input())
T = deque(input())
# print(S)
for i in range(1, len(S)+1):
    # print(S, T)
    if S.popleft() != T.popleft():
        print(i)
        exit()
print(i+1)

単純に文字列として扱うとTLEになりますので、
扱いに注意しないといけません。

ここで使うのはdequeです。
BFSなどでも使えるのでわからなかった方はよく復習しておいてください。
以下参考ページです。

仕組み自体はすごく単純で、
先頭から順番に比較して違う文字だったらその時のインデックスを出力して終了します。

ちなみに最後まで同じだった場合は、
末尾に文字が追加されたということなので、
末尾のインデックスを出力して終了します。

補足:C問題

別にdeque使わなくてもよかったみたいです。
詳しくは以下を参考にしてください。

S = input()
T = input()

for i in range(len(S)):
    if S[i] != T[i]:
        print(i+1)
        exit()
print(len(T))

この記事が気に入ったらサポートをしてみませんか?