βλ¬Έμ
https://www.acmicpc.net/problem/2206
λ©λͺ¨λ¦¬: 323464 KB, μκ°: 1936 ms
λλΉ μ°μ νμ, κ·Έλν μ΄λ‘ , κ·Έλν νμ
N×Mμ νλ ¬λ‘ ννλλ λ§΅μ΄ μλ€. 맡μμ 0μ μ΄λν μ μλ κ³³μ λνλ΄κ³ , 1μ μ΄λν μ μλ λ²½μ΄ μλ κ³³μ λνλΈλ€. λΉμ μ (1, 1)μμ (N, M)μ μμΉκΉμ§ μ΄λνλ € νλλ°, μ΄λ μ΅λ¨ κ²½λ‘λ‘ μ΄λνλ € νλ€. μ΅λ¨κ²½λ‘λ 맡μμ κ°μ₯ μ μ κ°μμ μΉΈμ μ§λλ κ²½λ‘λ₯Ό λ§νλλ°, μ΄λ μμνλ μΉΈκ³Ό λλλ μΉΈλ ν¬ν¨ν΄μ μΌλ€.
λ§μ½μ μ΄λνλ λμ€μ ν κ°μ λ²½μ λΆμκ³ μ΄λνλ κ²μ΄ μ’ λ κ²½λ‘κ° μ§§μμ§λ€λ©΄, λ²½μ ν κ° κΉμ§ λΆμκ³ μ΄λνμ¬λ λλ€.
ν μΉΈμμ μ΄λν μ μλ μΉΈμ μνμ’μ°λ‘ μΈμ ν μΉΈμ΄λ€.
λ§΅μ΄ μ£Όμ΄μ‘μ λ, μ΅λ¨ κ²½λ‘λ₯Ό κ΅¬ν΄ λ΄λ νλ‘κ·Έλ¨μ μμ±νμμ€.
βπ»νμ΄
μ΄λνλ©΄μ λ²½μ ν κ°λ λΆμ μ μλ€κ³ νλ€. κ·Έλ¬λ©΄ μ°λ¦¬λ λ²½μ λΆμλμ§ μ λΆμλμ§λ₯Ό κΈ°λ‘ν΄μΌ νλ€. κ·Έλμ λλ μ²μμ μ΄λν λ λ²½μ λΆμλμ§ μ λΆμλμ§μ λν΄ νμλ§ κΈ°λ‘νμ¬ νλ Έλ€.
μ°λ¦¬λ μ΄λν λ λ²½μ λΆμκ³ κ° μλ μκ³ λΆμκ³ κ°μ§ μμ μλ μλ€. κ·Έλ¬λ―λ‘ λΆμκ³ κ°λ κ²½μ°μ λΆμμ§ μκ³ κ°λ κ²½μ°λ₯Ό λλ μ visited λ°°μ΄μ 3μ°¨μ λ°°μ΄λ‘ νμ¬ κΈ°λ‘νλ€. visited[y][x][0]μ λ²½μ λΆμκ³ κ°μ§ μκ³ μ΄λν νμλ₯Ό λνλ΄κ³ , visited[y][x][1]μ λΆμκ³ μ΄λν νμλ₯Ό λνλΈλ€.
λ§μ½ λ€μ μμΉκ° 1μ΄κ³ μμ§ λΆμ μ μ΄ μλ€λ©΄ visted[ny][nx][1] = visited[cy][cx][0] + 1μ νμ¬ κΈ°λ‘νλ€. κ·Έλ μ§ μκ³ λ€μ μμΉκ° 0μ΄κ³ μμ§ λ°©λ¬Έν μ μλ κ³³μ΄λΌλ©΄ visited[ny][nx][crack] = visited[cy][cx][crack] + 1μ νμ¬ κΈ°λ‘νλ©΄ λλ€. μ¬κΈ°μ crackμ λ²½μ λΆμλμ§ λΆμμ§ μμλμ§λ₯Ό μλ―Ένλ€.
μ΄ κ°μ λ°©λ²μΌλ‘ κΈ°λ‘μ νμ¬ νμ¬ μμΉκ° (N-1, M-1)μ΄λΌλ©΄ visited[N-1][M-1][crack]μ λ°ννλ©΄ λκ³ , κ·Έλ μ§ μλ€λ©΄ -1μ λ°ννλ©΄ λλ€.
π»μ½λ
νλ¦° μ½λ
import sys
from collections import deque
input = sys.stdin.readline
N, M = map(int, input().split())
graph = [list(input().strip()) for _ in range(N)]
visited = [[False for _ in range(M)] for _ in range(N)]
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
def bfs():
q = deque()
q.append((0, 0, False))
visited[0][0] = True
cnt = 0
while q:
ln = len(q)
for _ in range(ln):
cy, cx, crack = q.popleft()
if (cy, cx) == (N-1, M-1):
print(cnt + 1)
return
for i in range(4):
ny, nx = cy + dy[i], cx + dx[i]
if 0 <= ny < N and 0 <= nx < M:
if not visited[ny][nx] and graph[ny][nx] == "0":
visited[ny][nx] = True
q.append((ny, nx, crack))
if graph[ny][nx] == "1" and not crack:
q.append((ny, nx, True))
cnt += 1
print(-1)
bfs()
μ λ΅ μ½λ
import sys
from collections import deque
input = sys.stdin.readline
N, M = map(int, input().split())
graph = [list(input().strip()) for _ in range(N)]
visited = [[[0, 0] for _ in range(M)] for _ in range(N)]
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
def bfs():
q = deque()
q.append((0, 0, 0))
visited[0][0][0] = 1
while q:
cy, cx, crack = q.popleft()
if (cy, cx) == (N-1, M-1):
return visited[cy][cx][crack]
for i in range(4):
ny, nx = cy + dy[i], cx + dx[i]
if 0 <= ny < N and 0 <= nx < M:
if not visited[ny][nx][crack] and graph[ny][nx] == "0":
visited[ny][nx][crack] = visited[cy][cx][crack] + 1
q.append((ny, nx, crack))
if graph[ny][nx] == "1" and crack == 0:
visited[ny][nx][1] = visited[cy][cx][0] + 1
q.append((ny, nx, 1))
return -1
print(bfs())
πνκΈ°
μ²μμλ κ·Έλ₯ νμλ§ λΆμλμ§ μ λΆμλμ§ κΈ°λ‘νλ©΄ λλ€κ³ μκ°νλ€. κ·Έλ°λ° μκ°ν΄λ³΄λ λλ¬νλ μμΉλ₯Ό λ²½μ λΆμκ³ λλ¬νμ μλ μκ³ κ·Έλ μ§ μμ μλ μλ€λ κ²μ κΉ¨λ¬μλ€. λ¬Έμ λ₯Ό ν λ λ무 λ¨μνκ² μκ°νμ§ λ§μμΌ κ² λ€.
κ·Έλ¦¬κ³ νμμ λ³μλ₯Ό λ°λ‘ λ§λ€μ΄μ μ΄λ νμλ₯Ό κΈ°λ‘νλ €κ³ νλλ° μκ°ν΄λ³΄λ visitedμ μ μ₯ν΄λ λλ€. κ΄ν λ³μ νλ λ λ§λ€μ΄μ λ©λͺ¨λ¦¬λ₯Ό λλ¦¬μ§ μλλ‘ ν΄μΌμ§...
'Coding Test > Algorithms' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 16928. λ±κ³Ό μ¬λ€λ¦¬ κ²μ/Python - Gold5 (0) | 2025.02.10 |
---|---|
[λ°±μ€] 7569. ν λ§ν /Python - Gold5 (1) | 2025.02.09 |
[λ°±μ€] 1012. μ κΈ°λ λ°°μΆ/Python - Silver 2 (0) | 2025.02.06 |
[λ°±μ€] 2667. λ¨μ§λ²νΈλΆμ΄κΈ°/Python - Silver 1 (0) | 2025.02.05 |
[λ°±μ€] 24480. μκ³ λ¦¬μ¦ μμ - κΉμ΄ μ°μ νμ 2/Python - Silver 2 (0) | 2025.02.04 |