BOJ - 13565

주의·2024년 1월 2일
0

boj

목록 보기
37/214

백준 문제 링크
침투

❓접근법

  1. BFS를 사용했다.
  2. 방문 처리를 해주는 visited 변수를 만들었다.
  3. if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] == '0') and not visited[nx][ny] 이면
    visited[nx][ny]를 방문 처리하고, queue에 좌표를 넣어준다.
  4. 주의할 점은 바깥쪽에서 안쪽까지 전류가 잘 흐르는지 파악을 하는 것이므로
    for j in range(M) 동안 if lst[N-1][j] == '0'이면
    bfs(N-1,j)를 실행시킨다.
  5. 마지막으로, 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')

0개의 댓글