알고리즘/baekjoon

[ baekjoon ] 침투 13565번 ( python )

Yanoo 2021. 6. 15. 20:57
728x90
반응형

문제

백준 13565 침투 풀이 ( 파이썬 )

https://www.acmicpc.net/problem/13565

 

13565번: 침투

첫째 줄에는 격자의 크기를 나타내는  M (2 ≤ M ≤ 1,000) 과 N (2 ≤ N ≤ 1,000) 이 주어진다. M줄에 걸쳐서, N개의 0 또는 1 이 공백 없이 주어진다. 0은 전류가 잘 통하는 흰색, 1은 전류가 통하지 않

www.acmicpc.net

 

풀이

맨 윗줄이 0인 부분만 q에 먼저 담고 bfs를 돌려서 맨 밑줄(index:m-1)에 도달한다면 멈춘다.

from collections import deque

m,n=map(int,input().split())

dx=[0,1,0,-1]
dy=[1,0,-1,0]

arr=[]
visited=[[False]*n for _ in range(m)]
q=deque()

for i in range(m):
    arr.append(list(map(int,input())))
    # 맨 윗줄이 0인 부분만 q에 저장
    for j in range(n):
        if i==0 and arr[i][j]==0:
            arr[i][j]=2
            q.append((i,j))

flag=False

while q:
    cx,cy=q.popleft()
    if cx==m-1:
        flag=True
        break

    for i in range(4):
        nx=cx+dx[i]
        ny=cy+dy[i]
        if nx<0 or ny<0 or nx>=m or ny>=n:
            continue
        if arr[nx][ny]==0:
            if nx==m-1:
                flag=True
                break
            arr[nx][ny]=2
            q.append((nx,ny))
    if flag:
        break

if flag:
    print("YES")
else:
    print("NO")
728x90
반응형