AtCoder ABC 091 B – Two Colors Card Game Python解説
Two Colors Card Game
問題文はこちら「Two Colors Card Game」。ある文字列を言ったときに、青いカードにその文字列が書かれていたら1円貰え、赤いカードに書かれていたら1円失う、最大で何円貰えるかという問題。
文字列と金額を管理したいので、まずは連想配列を使っていきたいとおもいます。
n = int(input())
a = {}
for _ in range(n):
s = input()
if s in a:
a[s] += 1
else:
a[s] = 1
m = int(input())
for _ in range(m):
t = input()
if t in a:
a[t] -= 1
else:
a[t] = -1
ans = 0
for i in a.values():
ans = max(i, ans)
print(ans)
最初のfor文では青いカードを扱うので、文字列が連想配列aの中にあれば+1円、なければ1円で初期化します。
続くfor文は赤いカードを扱うのでも、文字列が見つかるたびに-1円にしています。
最後に連想配列aの値をvalues()で取り出し、一番大きな数が答えになります。今回の問題では金額が0円より小さくなることはないのでansは0で初期化しています。
count関数を使った解き方もあります。
n = int(input())
s = [input() for _ in range(n)]
m = int(input())
t = [input() for _ in range(m)]
ans = 0
for i in set(s):
ans = max(s.count(i) - t.count(i), ans)
print(ans)
こちらの解き方の方が先述の連想配列を使った解き方よりコードが短くなるので簡単かもしれません。