본문 바로가기
알고리즘/백준

1058.친구

by 1.5볼트 2023. 2. 23.
728x90

문제

지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고, B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2-친구의 수를 출력하는 프로그램을 작성하시오.

A와 B가 친구면, B와 A도 친구이고, A와 A는 친구가 아니다.

입력

첫째 줄에 사람의 수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 각 사람이 친구이면 Y, 아니면 N이 주어진다.

출력

첫째 줄에 가장 유명한 사람의 2-친구의 수를 출력한다.

문제가 무슨소리를 하는건지 2-친구라는 개념 일단 서로 친구 이건 이해가 간다 그리고 A와 친구이고, B와 친구인 C가 존재 이 말은 서로 친구의 교집합이 있다면 2-친구라는뜻

일단 서로 친구인 경우를 구해주고 한명씩 친구의 교집합을 비교해 2-친구들 을 추가해준다 .

a=int(input())
d={}
for i in range(a):
    t=input()
    for j in range(a):
        if t[j]=="Y":
            d.setdefault(j,set())
            d.setdefault(i,set())
            d[i].add(j)
            d[j].add(i)
d1={"q":0}
for i in d.keys():
    for j in d.keys():
        if i!=j:
            if d[i]&d[j] and j not in d[i]:
                d1.setdefault(i,len(d[i]))
                d1[i]+=1
p=0
if d:
    p=max(map(lambda x:len(x),d.values()))

print(max(max(d1.values()),p))

'알고리즘 > 백준' 카테고리의 다른 글

1262.알파벳 다이아몬드  (0) 2023.02.27
1024.수열의 합  (0) 2023.02.26
2839.설탕 배달  (0) 2023.02.25
1935.후위 표기식2  (0) 2023.02.24
1269.대칭 차집합  (0) 2023.02.22

댓글