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)

こちらの解き方の方が先述の連想配列を使った解き方よりコードが短くなるので簡単かもしれません。

AtCoderB問題

Posted by cheese