ABC417の感想戦
目次
AtCoder Beginner Contest 417に参加したが、今回もコンテスト時間中に正解できたのは、AとB問題のみ。C問題を正解できるようになりたいが、とりあえずAとB問題を振り返る。
A - Substring
文字列Sが与えられるので、先頭のA文字と最後のB文字を削除した文字列を答える問題。
考え方
Pythonは、文字列は配列と同様に扱える。そして、配列はsliceが使えるので、[A:-B]を切り出す。
技術的工夫
配列を後ろから数える場合は、\(-1, -2, \cdots\)とする。そこで、Bをマイナスにするため\(-1\)を掛け算するが、変数名の前に-を付けると符号がマイナスになる。
Bが0の場合は、[A:0]とすることが出来ない、そこで条件分岐して対応する。
N, A, B = map(int, input().split())
S = input()
if B == 0:
print(S[A:])
else:
print(S[A:-B])
B - Search and Delete
数列AとBが与えられる。この数列Aから、数列Bに含まれる数を削除した結果を答える問題。
考え方
配列の長さはそれぞれ最大100なので、二重ループしても\(10^4\)であり特別な工夫は不要と判断した。
数列Bの各値ごとに配列Aをスキャンして、同じ値を見つけたら削除する。
技術的工夫
Pythonの配列から指定位置の値を削除するには、pop()
を使用する。pop()
の引数がない場合には、配列の最後から削除するが、引数を指定すると、してした位置の値を削除する。
N, M = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
for i in B:
for j in range(len(A)):
if i == A[j]:
A.pop(j)
break
print(*A)