-코드
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
for i in range(n):
for j in range(n):
for k in range(n):
if arr[j][i] == 1 and arr[i][k] == 1:
arr[j][k] = 1
for i in arr:
print(*i)
처음에 보고 무슨 말인지 몰라 찾아보니 플로이드-와샬 알고리즘이라고 해서 찾아보니 모든 정점에 대한 경로를 탐색하는 알고리즘으로 i에서 j로 가는 것이 가능 경우, j에서 i로 가는 경로도 가능하니 해당 부분이 0이면 1로 바꾸고, 또한 k를 거쳐서 i > k > j로 이동이 가능하면 해당 부분도 1로 바꾸어주는 알고리즘이었습니다. 처음에 작성을 했지만 if문을 잘못 작성하여 식이 꼬여서 바꿔보고 찾아보면서 해결을 하였습니다. 하지만 처음 본 분류의 문제라서 아쉬웠습니다.
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬] 22938번 백발백준하는 명사수 (0) | 2022.01.28 |
---|---|
[백준/파이썬] 23348번 스트릿 코딩 파이터 (0) | 2022.01.27 |
[백준/파이썬] 11800번 Tawla (0) | 2022.01.26 |
[백준/파이썬] 1992번 쿼드트리 (0) | 2022.01.25 |
[백준/파이썬] 7523번 Gauß (0) | 2022.01.25 |