- bfs(Flood Fill)을 이용하여 풀었다.
from collections import deque
N,M = map(int,input().split())
flag = "NO" # flag값 설정
arr = [list(map(int,input())) for _ in range(N)]
def bfs(j,i):
global flag
q = deque([(j,i)])
directY = [-1,1,0,0]
directX = [0,0,-1,1]
while q:
y,x = q.popleft()
for k in range(4):
dy = directY[k] + y
dx = directX[k] + x
if dy < 0 or dy >= N or dx < 0 or dx >= M: # 범위를 벗어난다면 continue
continue
if arr[dy][dx] == 0 and (dy == N-1): # bfs를 돌다 제일 아래 쪽(inner side)에 도착하게 되면 flag 값 변경
flag = "YES"
arr[dy][dx] = 1
q.append([dy,dx])
elif arr[dy][dx] == 0:
arr[dy][dx] = 1
q.append([dy,dx])
for i in range(M):
if arr[0][i] == 0: # 침투가 가능한 제일 위쪽 (outer side)만 탐색하여 0이라면 함수 실행
arr[0][i] = 1
bfs(0,i)
print(f"{flag}")
왜 틀렸을까?
- bfs 함수에 들어가기전 if문 조건에 오타가 있었다. if arr[0][i] == 1: 로 잘못 입력했었는데도 채점이 50%이상 진행되어서 이쪽 부분을 다시 볼 생각을 못했다.
'Python > 백준' 카테고리의 다른 글
[백준/Python] 13241.최소공배수 (0) | 2023.04.12 |
---|---|
[백준/Python] 12761.돌다리 (0) | 2023.03.03 |
[백준/Python] 6593.상범 빌딩 (0) | 2023.02.28 |
[백준/Python] 2467. 용액 (0) | 2022.12.23 |
[백준/Python] 17086. 아기상어 2 (0) | 2022.12.20 |