문제 이해
(1, 1)
에서 출발해 (N, M)
의 위치로 이동할 때 지나야 하는 최소의 칸 수 구하기입력
출력
문제 풀이 아이디어
import sys
from collections import deque
input = sys.stdin.readline
N, M = map(int, input().split())
board = [input() for _ in range(N)] # N줄의 스트링으로 입력 받기
dy
, dx
초기화dy = (0, 1, 0, -1)
dx = (1, 0, -1, 0)
bfs()
구현chk
초기화dq.popleft()
를 반복하며 dq가 존재할 동안 4가지 방향 탐색def bfs():
chk = [[False] * M for _ in range(N)]
chk[0][0] = True #(1, 1)부터 방문하므로 첫번째 노드의 chk 여부를 True로 설정
dq = deque()
dq.append((0, 0))
while dq:
y, x = dq.popleft()
for k in range(4):
ny = y + dy[k] # 다음 y 후보 좌표
nx = x + dx[k] # 다음 x 후보 좌표
ny
, nx
가 N, M의 범위 내의 정수인가?board[ny][nx]
의 값이 1인가? → 방문할 수 있는 칸인가?chk[ny][nx]
의 값이 False인가? → 방문하지 않은 칸인가?def is_valid_coord(y, x):
return 0 <= y < N and 0 <= x < M
def bfs():
chk = [[False] * M for _ in range(N)]
chk[0][0] = True #(1, 1)부터 방문하므로 첫번째 노드의 chk 여부를 True로 설정
dq = deque()
dq.append((0, 0))
while dq:
y, x = dq.popleft()
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if is_valid_coord(ny, nx) and board[ny][nx] == '1' and not chk[ny][nx]:
chk[ny][nx] = True
dq.append((ny, nx))
cnt
를 bfs 로직에 추가ncnt
도 함께 dq.append()
def bfs():
chk = [[False] * M for _ in range(N)]
chk[0][0] = True #(1, 1)부터 방문하므로 첫번째 노드의 chk 여부를 True로 설정
dq = deque()
dq.append((0, 0, 1))
while dq:
y, x, cnt = dq.popleft()
if y == N - 1 and x == M - 1: # 가장 마지막 (N, M)에 도착한 경우
return cnt
ncnt = cnt + 1 # 칸 개수
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if is_valid_coord(ny, nx) and board[ny][nx] == '1' and not chk[ny][nx]:
chk[ny][nx] = True
dq.append((ny, nx, ncnt))
import sys
from collections import deque
input = sys.stdin.readline
dy = (0, 1, 0, -1)
dx = (1, 0, -1, 0)
N, M = map(int, input().split())
board = [input() for _ in range(N)] # N줄의 스트링으로 입력 받기
def is_valid_coord(y, x):
return 0 <= y < N and 0 <= x < M
def bfs():
chk = [[False] * M for _ in range(N)]
chk[0][0] = True #(1, 1)부터 방문하므로 첫번째 노드의 chk 여부를 True로 설정
dq = deque()
dq.append((0, 0, 1))
while dq:
y, x, cnt = dq.popleft()
if y == N - 1 and x == M - 1: # 가장 마지막 (N, M)에 도착한 경우
return cnt
ncnt = cnt + 1 # 칸 개수
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if is_valid_coord(ny, nx) and board[ny][nx] == '1' and not chk[ny][nx]:
chk[ny][nx] = True
dq.append((ny, nx, ncnt))
print(bfs())