๋ฌธ์
https://swexpertacademy.com/main/code/problem/problemDetail.do
๋ด ๋ฌธ์ ํ์ด
import math
from collections import deque
tc = int(input())
INF = math.inf
for t in range(tc):
n = int(input())
mapArr = [list(map(int, list(input()))) for _ in range(n)]
visited = [[INF for _ in range(n)] for _ in range(n)]
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def bfs(deq, visited):
while deq:
(x, y, sums) = deq.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= n or ny >= n or (nx, ny) == (0, 0) or visited[nx][ny] <= mapArr[nx][ny] + sums:
continue
visited[nx][ny] = mapArr[nx][ny] + sums
deq.append((nx, ny, visited[nx][ny]))
return visited[-1][-1]
deq = deque()
deq.append((0, 1, mapArr[0][1]))
deq.append((1, 0, mapArr[1][0]))
print("#" + str(t + 1) + " " + str(bfs(deq, visited)))
๐ BFS, ๋ค์ต์คํธ๋ผ ๋ฌธ์ !
[๋ณ์ ์ค๋ช ]
- mapArr๋ ์ ๋ ฅ๋๋ ์ง๋ ๊ฐ์ intํ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ๋ฐ์์ค๋ค.
- visited๋ bfs ํจ์๋ฅผ ๋๋ฆด ๋ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํด์ฃผ๋ ๋์์,
ํด๋น ์๋ฆฌ๊น์ง ์ค๋๋ฐ ๊ฑธ๋ฆฐ ์ต์๊ฐ์ ์ ๋ฐ์ดํธํด์ฃผ๋ ์ญํ ์ ํ๋ค.
=> ์ฌ๊ธฐ์ ์ฌ์ฉํ INF๋ ์~์ฃผ ํฐ ๊ฐ์ด๋ฏ๋ก, ์ต์๊ฐ ๊ฐฑ์ ์ ์ ์ฉํ๋ค. - dx, dy๋ bfs ํจ์์์ ์ํ์ข์ฐ๋ก ์์ง์ด๋ ๊ฒ์ ๋๋๋ค.
[ํ์ด ์ค๋ช ]
- bfsํจ์์์ ํ์ํ ์๋ฆฌ๋ค์ ์ ์ฅํด์ค ์ฅ์๋ฅผ deq์ผ๋ก ๋ง๋ค์ด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋จผ์ ํ์์ด ์์๋์ด์ผ ํ [0][1], [1][0]์ ๋ํ ์ขํ๊ฐ๊ณผ,
๊ทธ ์๋ฆฌ๊น์ง ์ค๋๋ฐ ๊ฑธ๋ฆฐ ์ต์๊ฐ์ ํจ๊ป ํํ ํํ๋ก ์ ์ฅํ๋ค. - deq์ ์ ์ฅ๋ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ํ์์ ์์ํ๋๋ฐ,
๊ทธ ๊ฐ์ x, y, sums์ ์ฐจ๋ก๋๋ก ์ ์ฅํด์ ์ฌ์ฉํด์ฃผ์๋ค. - ์์ ์ ์ํ dx, dy์ for๋ฌธ์ ์ด์ฉํ์ฌ ์ํ์ข์ฐ๋ฅผ ํ์ํด์ฃผ๋๋ฐ,
1) ํ์ํ ์๋ฆฌ๊ฐ ์ง๋์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ฑฐ๋
2) ์์์ง์ ์ด๊ฑฐ๋
3) ์ด๋ฏธ visited[nx][ny]์ ์ ์ฅ๋ ๊ฐ์ด ์ถฉ๋ถํ ์์ ๊ฒฝ์ฐ
์ด๋ ๊ฒ ์ธ ๊ฒฝ์ฐ์๋ ๋์ด์ ํ์ํ ์ ์๊ฑฐ๋, ํ์ํ ์ด์ ๊ฐ ์์ผ๋ฏ๋ก continue ํด์ค๋ค. - ์์ 3)๋ฒ ํญ๋ชฉ์ ๋ํด์๋ง ์ถ๊ฐ๋ก ์ค๋ช
ํด๋ณด์๋ฉด
visited[nx][ny]์ INF๊ฐ ์๋ ๊ฐ์ด ์ ์ฅ๋์ด์๋ค๋ ๊ฒ์ ์ด๋ฏธ ํ ๋ฒ ๋ฐฉ๋ฌธํ ์ ์๋ค๋ ์๋ฏธ์ด๊ณ ,
๊ทธ ๊ฐ์ด ํ์ํ๋ ค๋ ์๋ฆฌ mapArr[nx][ny]์ ๊ฐ๊ณผ, ํ์ฌ mapArr[x][y]๊น์ง ์ค๋๋ฐ ๊ฑธ๋ฆฐ ๊ฐ๋ณด๋ค
๋ ์๋ค๋ฉด, ์ด๋ฏธ ํ์ฌ ํ์์ค์ธ ๊ฒฝ๋ก๋ ์ต์๊ฐ ์๋์ด ํ๋ช ๋๋ฏ๋ก ์์๊ฐ์ ์์ธ ์ํฉ์ ๋ง๋ค์๋ค. - ๊ทธ๋ฆฌ๊ณ ์์ธ์ ๊ฑธ๋ฆฌ์ง ์์๋ค๋ฉด visited[nx][ny]๊ฐ ๋ฐฉ๋ฌธ๋ ์ ์๋๋ผ๋
ํ์ฌ ํ์ํ๋ ๊ฒฝ๋ก๊ฐ ์ต์๋ผ๋ ์๋ฏธ์ด๋ฏ๋ก visited ๋ฆฌ์คํธ๋ฅผ ๊ฐฑ์ ํด์ฃผ์๊ณ ,
deq์๋ ๋ ์๋ก์ด ํ์ ํ์ ์ขํ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๊ฐํด์ ๋ฐ๋ณต์ด ์งํ๋ ์ ์๊ฒ ํ๋ค. - ๋ง์ง๋ง์๋ visited์ ๋ง์ง๋ง ์๋ฆฌ์ ์ ์ฅ๋ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋์ฐฉ์ ์ ๊ฐ ์ ์๋ ์ต์๊ฐ์ ๋ฐํํ๋ค.
๐ก ํผ๋๋ฐฑ
- ์ฒ์์ deque๋ฅผ ์ฌ์ฉํ์ง ์๊ณ idx ๋ณ์๋ฅผ ๋ง๋ค์ด์ ์๋์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฎ๊ฒจ๊ฐ๋ฉฐ
while ๋ฐ๋ณต์ด ์งํ๋ ์ ์๋๋ก ํ๋๋ฐ, ์ด ๊ฒฝ์ฐ ์๊ฐ ๋๋ฌด ์ปค์ง๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ deque๋ก ํ์ดํ๋๋ ๋ฐ๋ก ํต๊ณผ,,! - ์ด์ ๊น์ง๋ ๋ญ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง์ด ์ฌ์ฉํ๋๊ฒ ์ซ์ด์
deque๋์ ์ธ๋ฑ์ค ๊ฐ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฃผ๋ก ์ผ์๋๋ฐ,
์์ผ๋ก๋ deque๋ ์ ์ฉํด๋ด์ผ๊ฒ ๋ค. ๋ ์์ธํ ๊ณต๋ถ๋ ํด๋ณด๊ณ !
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] Contact SWEA #1238 (0) | 2022.07.12 |
---|---|
[Python Algorithm] ๋ฏธ๋ก1 SWEA #1226 (0) | 2022.07.05 |
[Python Algorithm] ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด BOJ #11054 (0) | 2022.06.27 |
[Python Algorithm] ๋ ์ด์ ํต์ BOJ #6087 (0) | 2022.06.24 |
[Python Algorithm] ํ๋ก์ด๋ BOJ #11404 (0) | 2022.06.23 |
๋๊ธ