<λ¬Έμ λ§ν¬>
https://www.acmicpc.net/problem/2206
<νμ΄ μ λ΅>
- λ²½μ λΆμλ κ±Έ ꡬννλ κ² ν΅μ¬μ΄λ€.
- μΌλ°μ μΈ 2μ°¨μ λ°°μ΄μ λ²½ λΆμλ κ±Έ λνλ΄μ£Όλ λ³μλ₯Ό μΆκ°μ μΌλ‘ λ£μ΄μ bfsλ₯Ό λ리면 μλ¬κ° λλ€.
- νΉμ μ§μ (r, c)μ λ²½μ λΆμκ³ λλ¬νλ λ°©λ²(a)λ λ²½μ λΆμμ§ μκ³ λλ¬νλ λ°©λ²(b)κ° μλλ°, aκ° bλ³΄λ€ κ±°λ¦¬κ° μ§§μ λ(a < b)μΌ λ 2μ°¨μ λ°°μ΄μμλ aλ§ νμ λλ€.
- κ·Έλ¬λ€ λμ€μ λ²½μ λΆμμ§ μκ³ λ ν΅κ³Όνμ§ λͺ»νλ μν©μ΄ λ°μν λ μ΄λ―Έ λ²½μ λΆμ ¨κΈ° λλ¬Έμ(a) ν΅κ³Όλ₯Ό λͺ»νκ³ -1μ λ°ννκ² λλλ°, μ¬μ€ b 루νΈλ‘ μμΌλ©΄ ν΅κ³Όν μ μλ κΈΈμ΄λ€.
3. λ°λΌμ λ²½μ λΆμμ§ μμ λ°°μ΄κ³Ό λ²½μ λΆμμ§ μμ λ°°μ΄ λ λ°°μ΄μ λ΄μμ 3μ°¨μ λ°°μ΄λ‘ νννκ³ bfsλ₯Ό λλ €μΌ νλ€. λ§νλ μνμμ μ νμ λ°λΌ μΈκ³μ μ΄ λλλ κ·Έλ° λλμΌλ‘ μ΄ν΄νλ©΄ λλ€.
4. 3μ°¨μ λ°°μ΄μ λ§λ€ λ μ£Όμν΄μΌν μ μ arrμ΄ κΈ°λ³Έμ μΌλ‘ 2μ°¨μ λ°°μ΄μ΄κΈ° λλ¬Έμ ν λΉμ΄λ κ·Έλ₯ 볡μ¬κ° μλλΌ deepcopyλ₯Ό μ΄μ©ν κΉμ 볡μ¬λ₯Ό ν΄μ€μΌ νλ€.
5. μ¬κΈ°κΉμ§ νμΌλ©΄ λ²½μ λΆμ ¨μ λ μ°¨μμ΄ μ΄λνλ κ²λ§ μ κ²½μ¨μ bfsλ₯Ό ꡬνν΄μ£Όλ©΄ λλ€.
<μ λ΅ μ½λ>
# 220827 2206 λ²½ λΆμκ³ μ΄λνκΈ°
# μ λ΅μ½λ
from collections import deque
from copy import deepcopy
import sys
intput = sys.stdin.readline
# N: νμ κ°μ, M: μ΄μ κ°μ
N, M = map(int, input().split())
# arr: 맡, arr2: arrμ 볡μ¬λ³Έ (2μ°¨μ λ°°μ΄μ΄λ―λ‘ deepcopy)
arr = [list(map(int, input())) for _ in range(N)]
arr2 = deepcopy(arr)
# arr_3d: 맡μ 3μ°¨μ λ°°μ΄ (0: λ²½ μ λΆμ¨, 1: λ²½ λΆμ¨)
arr_3d = [arr, arr2]
# νμ λ°©ν₯
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
# 3μ°¨μ bfs ν¨μ μ μΈ
def bfs(z, r, c):
# μΆλ°μ νμ
arr_3d[z][r][c] = 1
# queue: μ’νλ₯Ό λ΄μ ν
queue = deque()
queue.append((z, r, c))
while queue:
z, r, c = queue.popleft()
# λͺ©ν μ§μ λμ°© μ 거리 μΆλ ₯ ν λ°ν
if r == N - 1 and c == M - 1:
print(arr_3d[z][r][c])
return
# 4λ°©ν₯ νμ
for i in range(4):
nr = r + dr[i]
nc = c + dc[i]
# νμ λ°©ν₯μ΄ μΈλ±μ€ λ²μλ₯Ό λ²μ΄λμ§ μμ λ
if 0 <= nr < N and 0 <= nc < M:
# λ²½μ΄ μμ κ²½μ°
if arr_3d[z][nr][nc] == 1:
# μμ§ λ²½μ λΆμμ§ μμμ κ²½μ° λ²½μ λΆμκ³ λ²½μ λΆμ μ°¨μμΌλ‘ λμ΄κ°μ νμμ μ§ννλ€.
if z == 0:
arr_3d[1][nr][nc] = arr_3d[0][r][c] + 1
queue.append((1, nr, nc))
# λ²½μ΄ μμ κ²½μ° νμ¬ μ°¨μμμ κ·Έλλ‘ νμμ μ§ννλ€.
elif arr_3d[z][nr][nc] == 0:
arr_3d[z][nr][nc] = arr_3d[z][r][c] + 1
queue.append((z, nr, nc))
# λͺ©ν μ§μ μ λμ°©νμ§ λͺ»νμ κ²½μ° -1 μΆλ ₯ ν λ°ν
print(-1)
return
# bfs νμ μ€μ
bfs(0, 0, 0)
'β Problem_Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 2146 λ€λ¦¬ λ§λ€κΈ° (Python/νμ΄μ¬) (0) | 2022.10.01 |
---|---|
[λ°±μ€] 20055 μ»¨λ² μ΄μ΄ λ²¨νΈ μμ λ‘λ΄ (Python/νμ΄μ¬) (1) | 2022.09.30 |
[λ°±μ€] 2212 μΌμ (Python/νμ΄μ¬) (2) | 2022.09.29 |
[λ°±μ€] 3190 λ± (Python/νμ΄μ¬) (0) | 2022.09.28 |
[λ°±μ€] 14503 λ‘λ΄μ²μκΈ°(Python/νμ΄μ¬) (0) | 2022.09.26 |
λκΈ