https://www.acmicpc.net/problem/1058
풀이 과정
- 2-친구가 되기 위해서는 간단하게 보면 직접 친구이거나, 한명의 친구를 거쳐서 친구이면 된다. 따라서 플로이드 알고리즘을 사용하여 거리 배열을 구한다.
- 직접 친구인 경우의 거리는 1이다.
- 한명의 친구를 거쳐서 친구인 경우의 거리는 2이다.
- 각 사람별로 거리가 2 이하인 친구의 명수를 구해준 다음 최댓값을 구해준다.
- (2)에서 구한 최댓값을 출력해 준다.
소스 코드
import sys
input = lambda: sys.stdin.readline().rstrip()
N = int(input())
matrix = [list(input()) for _ in range(N)]
for i in range(N):
for j in range(N):
if matrix[i][j] == 'N':
matrix[i][j] = int(10e9)
else:
matrix[i][j] = 1
for i in range(N):
for j in range(N):
for k in range(N):
matrix[j][k] = min(matrix[j][k], matrix[j][i] + matrix[i][k])
answer = 0
for i in range(N):
count = 0
for j in range(N):
if j != i and matrix[i][j] <= 2:
count += 1
answer = max(answer, count)
print(answer)
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 1946 ] [ Greedy ] 신입 사원 (0) | 2022.01.20 |
---|---|
[ 2638 ] [ BFS ] 치즈 (0) | 2022.01.14 |
[ 2456 ] [ 구현 ] 나는 학급회장이다 (0) | 2022.01.11 |
[ 16398 ] [ Kruskal ] 행성 연결 (0) | 2022.01.09 |
[ 2688 ] [ DP ] 줄어들지 않아 (0) | 2022.01.06 |