백준 문제 링크
침투
- BFS를 사용했다.
- 방문 처리를 해주는 visited 변수를 만들었다.
- if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] == '0') and not visited[nx][ny] 이면
visited[nx][ny]를 방문 처리하고, queue에 좌표를 넣어준다.- 주의할 점은 바깥쪽에서 안쪽까지 전류가 잘 흐르는지 파악을 하는 것이므로
for j in range(M) 동안 if lst[N-1][j] == '0'이면
bfs(N-1,j)를 실행시킨다.- 마지막으로, visited에서 처음 인덱스(격자의 안쪽)에
True가 있으면 'YES'를
True가 없으면 'NO'를 반환한다.
from collections import deque
N,M = map(int, input().split())
lst = []
for i in range(N):
lst.append(list(input()))
visited = [[False] * M for _ in range(N)]
def bfs(x,y):
queue = deque()
queue.append((x,y))
dx = [0,0,1,-1]
dy = [1,-1,0,0]
visited[x][y] = True
while queue:
x,y = queue.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] == '0') and not visited[nx][ny] :
visited[nx][ny] = True
queue.append((nx,ny))
for j in range(M):
if lst[N-1][j] == '0':
bfs(N-1,j)
if True in visited[0]:
print('YES')
else:
print('NO')