DevYoon
[SWEA] 1249. ๋ณด๊ธ๋ก (Python) ๋ณธ๋ฌธ
link ๐ https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15QRX6APsCFAYD
1๏ธโฃ ์ถ๋ฐ์ง S(0, 0)์์ ๋์ฐฉ์ง G(N-1, N-1)๊น์ง ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ ์์ ๋ณต๊ตฌ ์๋ฃํ๊ธฐ
2๏ธโฃ ๋๋ก๊ฐ ํ์ฌ์ง ๊น์ด์ ๋น๋กํ์ฌ ๋ณต๊ตฌ ์๊ฐ ์์ ex) 1 โก๏ธ 1 ์์
3๏ธโฃ 0 โก๏ธ ๋ณต๊ตฌ ๋ถํ์ (๊ทธ๋ฅ ๋ํด์ฃผ๊ธฐ)
from collections import deque
def bfs():
q = deque()
q.append((0, 0))
while q:
ny, nx = q.popleft()
direct = [(-1, 0), (1, 0), (0, -1), (0, 1)]
for i in range(4):
dy = direct[i][0]+ny
dx = direct[i][1]+nx
if 0 <= dy < N and 0 <= dx < N:
if visit[dy][dx] == 0: # ํ ๋ฒ๋ ๋ค๋ฅธ ์ ์์ผ๋ฉด
visit[dy][dx] = 1
spend[dy][dx] = spend[ny][nx]+int(arr[dy][dx]) # ์๊ฐ ๋ฑ๋ก
q.append((dy, dx))
else: # ๋ค๋ฅธ ์ ์์ผ๋ฉด
if spend[dy][dx] > spend[ny][nx]+int(arr[dy][dx]): # ์ต์ ๊ฐฑ์
spend[dy][dx] = spend[ny][nx]+int(arr[dy][dx])
q.append((dy, dx))
t = int(input())
for tc in range(1, t+1):
N = int(input())
arr = [list(input()) for _ in range(N)]
visit = [[0]*N for _ in range(N)]
spend = [[0]*N for _ in range(N)]
visit[0][0] = 1
bfs()
print(f'#{tc} {spend[N-1][N-1]}')
โ๏ธ ๋ฉ๋ชจ
- ์ต๊ด์ฒ๋ผ split() ์ผ๋ค๊ฐ ์ ๋๊ธธ๋ ๋ดค๋๋ 01234 ์ด๋ฐ ์์ผ๋ก ๋ถ์ด ์์๋ค...๐
- ์ต์ ์๊ฐ์ด๊ธธ๋ ์๊ฐ์์ด BFS๋ก ํ์๋๋ ๋ต์ด ์ ๋๋ก ๋์ค์ง ์์๋ค..ใ
- ๊ทธ๋ผ DFS๋ก ํ์ด๋ณผ๊น? ํ๋๋ ๋ต์ ์ ๋์ค๋๋ฐ ์๊ฐ ์ด๊ณผ๐ฅฒ
- ๊ตฌ๊ธ๋ง์ ๋์์ ๋ฐ์ ๊ฐ ๋ธ๋ก๋ง๋ค ๋ณต๊ตฌ์ ์์๋๋ ์๊ฐ์ ์ ์ด์ค spend๋ฐฐ์ด์ ๋ง๋ค์ด ์ฃผ์๊ณ , visit ๋ฐฐ์ด์ ์ฌ์ฉํด์ ํ ๋ฒ๋ ๋ค๋ฅธ ์ ์์ผ๋ฉด 1 ์ฒดํฌ ํ spend ๋ฐฐ์ด์ ๋ฑ๋ก & q์ ๋ฃ์ด์ฃผ๊ธฐ, ๋ค๋ฅธ ์ ์์ผ๋ฉด spend ๋ฐฐ์ด ์ต์๊ฐ ๊ฐฑ์ ํ q์ ๋ฃ์ด์ฃผ๋ ์์ผ๋ก ํ๋ค.
- ๋์ฐฉ์ง๋ (N-1, N-1) ์ด๋ฏ๋ก spend ๋ฐฐ์ด์ (N-1, N-1) ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ์ ๋ต์ด๋ค.