알고리즘
[백준/Python] 13565. 침투
스연
2023. 9. 24. 18:20
728x90
1. 백준 13565. 침투 (실2)
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
풀이
CODE
import sys
sys.stdin = open('input.txt', 'r')
input = sys.stdin.readline
m, n = map(int, input().split())
board = []
for _ in range(m):
board.append(list(input().rstrip()))
def dfs_stack(x, y, visited):
stack = [(x, y)]
# 현재 위치를 방문했다고 표시
visited[x][y] = True
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
while stack:
x, y = stack.pop()
# 현재 위치에서 인접한 위치 탐색
for d in range(4):
nx, ny = x + dx[d], y + dy[d]
# 배열 범위 안에 있고 방문하지 않았다면 스택에 넣고 탐색
if 0 <= nx < m and 0 <= ny < n and not visited[nx][ny] and board[nx][ny] == '0':
if nx == m-1:
return True
else:
stack.append((nx, ny))
visited[nx][ny] = True
return False
# 방문 정보
visited = [[False] * n for _ in range(m)]
result = False
for j in range(n):
if board[0][j] == '0':
result = dfs_stack(0, j, visited)
if result:
break
print('YES' if result else 'NO')
dfs를 활용한 풀이
728x90