AtCoder ABC 216 B – Same Name Python解説

スポンサーリンク

Same Name

N 人の人がいます。i(1≤i≤N) 人目の人の姓は Si、名は Tiです。
同姓同名であるような人の組が存在するか、すなわち 1≤i<j≤N かつ Si=Sjかつ Ti=Tj
​を満たすような整数対 (i,j) が存在するか判定してください。

AtCoder Beginner Contest「Same Name」

制約はN <= 1000と大きくないので、同姓同名かどうかを全探索で調べていきます。同姓同名の人が存在していたらflagをTrueにして判定をします。

n = int(input())

a = []
flag = False

for _ in range(n):
    a.append(input().split())
    
for i in range(n-1):
    for j in range(i+1, n):
        if a[i] == a[j]:
            flag = True
            break
            
print("Yes" if flag else "No")

2重ループを用いて組み合わせの全探索を行います。a[i] == a[j]が成立すれば、同姓同名の人が存在することになるので、flagをTrueにして探索を終了します。

他にも、set関数を使い同姓同名の人、すなわち、重複した要素を削除して、要素数が元の要素数より減っていたら同姓同名の人が存在するのでYes、要素数に変化がなければ同姓同名の人が存在しないのでNoを出力する方法があります。

n = int(input())

a = [input() for _ in range(n)]

print("Yes" if len(set(a)) < n else "No")