1058번: 친구
지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람
www.acmicpc.net
- 처음에는 각 노드별로 연결된 노드들에 대해서 set 로 저장한 다음, 자신과 연결된 친구들의 set 들을 모두 합하려고 하였는데, 알 수 없는 이유로 틀렸습니다가 떴다.
- 이산수학 시간에 배웠던 대로, 현재 문제는 2번 걸쳐서 연결된 친구를 구하는 것이기 때문에, 그래프를 만든 후 제곱해준다.
- 제곱한 그래프가 2번에 걸쳐 연결되는 그래프니까, 기존 그래프와 더할 경우 2-친구 관계 그래프가 만들어진다.
- 거기서 루프를 제외해주고, 연결 횟수는 중요하지 않으니 전부 1로 취급해준 뒤 각 행별로 더해주고 최댓값을 구해준다.
n = int(input())
graph = [[1 if v=='Y' else 0 for v in input()] for _ in range(n)] # 입력받은 그래프
graph2 = [[sum(graph[i][x]*graph[x][j] for x in range(n)) for j in range(n)] for i in range(n)] # 제곱
graph3 = [[int(bool(graph[i][j]) or bool(graph2[i][j])) if i!=j else 0 for j in range(n)] for i in range(n)] # 2-친구
print(max([sum(graph3[i]) for i in range(n)]))
'PS > BOJ' 카테고리의 다른 글
[백준] 1261 : 알고스팟 (0) | 2020.12.29 |
---|---|
[백준] 1987.cpp : 알파벳 (0) | 2020.12.28 |
[백준] 1762 : 평면그래프와 삼각형 (0) | 2020.10.29 |
[백준] 2512 : 예산 (0) | 2020.09.24 |
[백준] 10799 : 쇠막대기 (0) | 2020.09.23 |