๋ฌธ์
https://www.acmicpc.net/problem/11403
๋ด ๋ฌธ์ ํ์ด (BFS)
import sys
sys.setrecursionlimit(10 ** 6)
n = int(sys.stdin.readline().strip())
table = []
for _ in range(n):
table.append(list(map(int, sys.stdin.readline().strip().split())))
result = table
def bfs(queue, find, checkList):
idx = 0
check = False
while idx < len(queue):
now = queue[idx]
idx += 1
if 1 not in table[now]:
continue
else:
for x in range(n):
if table[now][x] == 1 and checkList[now][x] is False:
checkList[now][x] = True
if x == find:
check = True
break
else:
queue.append(x)
if check:
break
if check:
break
if check:
return 1
else:
return 0
for i in range(n):
for j in range(n):
if result[i][j] == 1:
continue
else:
checkList = [[False for _ in range(n)] for _ in range(n)]
checkList[i][j] = True
result[i][j] = bfs([i], j, checkList)
print('\n'.join(' '.join(map(str, i)) for i in result))
๐ BFS๋ก ํ์ด (ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชฐ๋ผ์ bfs๋ก ํ์ดํ๋ค.)
- ํ๋ ฌ์ ๋๋ฉฐ 1์ด ์์ ๊ฒฝ์ฐ ๊ฒฝ๋ก๊ฐ ํ์ธ๋ ๊ฒ์ด๋ฏ๋ก ๊ทธ๋๋ก result์ 1์ ์ ์ฅํ๋ค.
- ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ bfs ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ฒฝ๋ก๋ฅผ ํ์ธํด์ฃผ์๋๋ฐ, ์ค๋ณต์ ํผํ๊ธฐ ์ํ checkList ํจ์๋ ์์ฑํ๋ค.
์์ํ๋ ์๋ฆฌ๋ง True๋ก ๋ฐ๊ฟ๋๊ณ bfs ํจ์๋ฅผ ํธ์ถํ๋ค. - bfs ํจ์์์๋ queue์ ํ์์ด ํ์ํ ํ๋ค์ ์ถ๊ฐํ๋ฉฐ ํ์ธํด์ฃผ์๋ค.
์๋ฅผ ๋ค์ด a, b ์๋ฆฌ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ ํ ๋, queue์๋ a๊ฐ ์ ์ฅ๋์ด ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ b๊น์ง ๋๋ฌํ๊ธฐ ์ํด์๋ ์ค๊ฐ์ ์ด๋ ํ ๋ ธ๋๋ฅผ ๊ฑฐ์น๋ ์ง, ๋ฐ๋ก ๊ฐ๋ ์ง ํ ์ ํ์ง๊ฐ ํ์ํ๋ค.
๋ฐ๋ผ์ ๊ฐ์ฅ ๋จผ์ aํ์ 1์ด ์ ์ฅ๋ ๊ณณ์ด ์๋์ง๋ฅผ ํ์ธํด์ค๋ค.
๋ง์ฝ 1์ด ํ๋๋ ์๋ค๋ฉด ์ฐ๊ฒฐ๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์ ํ ์๋ค๋ ๋ป์ด๋ฏ๋ก continue ํด์ค๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ 1์ด ์ ์ฅ๋ aํ ๋ชจ๋ ์๋ฆฌ์ j ๊ฐ์ queue์ ์ถ๊ฐํ๋๋ฐ, (๋ชจ๋ ๊ฐ๋ฅ์ฑ ์์ผ๋ฏ๋ก)
ํน์ j ๊ฐ์ด ์ฒ์์ ์ฐพ๊ณ ์ ํ ๋ชฉ์ ์ง์ธ b์ ๊ฐ๋ค๋ฉด ๋์ด์ ํ์ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ชจ๋ ์ข ๋ฃํ๋ค.
์์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์๋์ง ํ๋ณํด์ค ์ ์๋ค.
๋ด ๋ฌธ์ ํ์ด (ํ๋ก์ด๋ ์์ )
import sys
sys.setrecursionlimit(10 ** 6)
n = int(sys.stdin.readline().strip())
table = []
for _ in range(n):
table.append(list(map(int, sys.stdin.readline().strip().split())))
for k in range(n):
for i in range(n):
for j in range(n):
if table[i][k] and table[k][j]:
table[i][j] = 1
print('\n'.join(' '.join(map(str, i)) for i in table))
๐ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ค.
- k๋ฅผ ์ค๊ฐ ๋ ธ๋๋ก ์๊ฐํ๊ณ , k๊ฐ์ ๊ฑฐ์น๋ ๊ฐ์ ์ด ์๋์ง๋ฅผ ํ์ธํ๋ค.
- 3์ค for๋ฌธ์ ์ด์ฉํ์ฌ ๋ชจ๋ ์๋ฆฌ์ ์ฐ๊ฒฐ ๊ฐ๋ฅ์ฑ์ ํ์ธํด์ค ์ ์์๋ค.
์๋ฅผ ๋ค์ด 1 -> 3 -> 4 -> 5 ๋ก ์ฐ๊ฒฐ๋๋ ๋ ธ๋๋ค์ด ์๋ค๊ณ ๊ฐ์ ํ์.
์ด ๋ i == 1, j == 5 ์ธ ์๋ฆฌ๋ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ฅผ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ฉด,
iํ๊ณผ j์ด์์ ๊ฐ๊ฐ 1์ด ์กด์ฌํ๋์ง๋ฅผ ํ์ธํ๊ณ , ๋ชจ๋ ์กด์ฌํ๋ค๋ฉด ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ๋ณํ๋ค.
+ ์๋ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ a -> b ๊ฒฝ๋ก์ a -> c -> b ๊ฒฝ๋ก ์ค ๋ ๊ฐ๊น์ด ๊ฒ์ ํ๋ณํ๊ณ ์ ๋ฐ์ดํธํด์ฃผ๋ ์ญํ ์ ํ๋๋ฐ, ์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ๋ฅผ ํ๋ณํ ํ์์์ด ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ์ง๋ง ํ๋จํ๋ฉด ๋๋ฏ๋ก ์์๊ฐ์ด ํ์ดํ๋ฉด ๋๋ค.
๐ก ํผ๋๋ฐฑ
- bfs๋ก ํ์ดํ์ ๋๋ ์๊ฐ๋ณต์ก๋๋ ์์ข์๊ณ ํ์ด๋ ๋ณต์กํ๋๋ฐ
ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋๊น ํจ์ฌ ํจ์จ์ ์ผ๋ก ํ ์ ์์๋ค.
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] ๋ ์ด์ ํต์ BOJ #6087 (0) | 2022.06.24 |
---|---|
[Python Algorithm] ํ๋ก์ด๋ BOJ #11404 (0) | 2022.06.23 |
[Python Algorithm] ๊ฐ์ด๋ฐ๋ฅผ ๋งํด์ BOJ #1655 (0) | 2022.06.14 |
[Python Algorithm] ๊ฐ์์ค ๋ฐฐ์ BOJ #11000 (0) | 2022.06.13 |
[Python Algorithm] ์นด๋ ๊ตฌ๋งคํ๊ธฐ BOJ #11052 (0) | 2022.05.26 |
๋๊ธ