백준 16954번 파이썬https://www.acmicpc.net/problem/16954
라기 보다는,, 반성문 느낌
from sys import stdin
from collections import deque
def visitable(x, y, visited):
return 0 <= x < 8 and 0 <= y < 8 and graph[x][y] == '.' and not visited[x][y]
def bfs(start):
q = deque([start])
dirs = ((0, 0),
# 상하좌우
(0, 1), (0, -1), (1, 0), (-1, 0),
# 대각선
(1, 1), (1, -1), (-1, 1), (-1, -1))
while q:
# 벽이 이동한 후에, 다시 체크해줘야한다.
visited = [[False] * 8 for _ in range(8)]
for _ in range(len(q)):
cur_y, cur_x = q.popleft()
if [cur_y, cur_x] == [0, 7]:
return 1
if graph[cur_y][cur_x] == '#': # 벽이 이동한 후 체크
continue
for y, x in dirs:
next_y, next_x = cur_y + y, cur_x + x
if visitable(next_y, next_x, visited):
visited[next_y][next_x] = True
q.append([next_y, next_x])
# 행을 아래로 이동
graph.pop()
graph.insert(0, ['.', '.', '.', '.', '.', '.', '.', '.'])
return 0
if __name__ == '__main__':
graph = [list(stdin.readline().strip()) for _ in range(8)]
print(bfs([7, 0]))