Open JehooJeon opened 1 month ago
# 1226. [S/W 문제해결 기본] 7일차 - 미로1
from collections import deque
def maze_search(maze, start, end):
# 아래쪽, 오른쪽, 위쪽, 왼쪽 순서대로 탐색
dxy = [[1, 0], [0, 1], [-1, 0], [0, -1]]
queue = deque([start])
visited = [[-1] * 16 for _ in range(16)]
visited[start[0]][start[1]] = 0
while queue:
x, y = queue.popleft()
for dx, dy in dxy:
nx, ny = x + dx, y + dy
if 0 <= nx < 16 and 0 <= ny < 16 and (maze[nx][ny] == 0 or maze[nx][ny] == 3) and visited[nx][ny] == -1:
queue.append((nx, ny))
visited[nx][ny] = 0
if nx == end[0] and ny == end[1]:
return 1
return 0
for _ in range(10):
tc = int(input())
maze = [list(map(int, input())) for _ in range(16)]
# 시작 지점, 종료 지점 좌표 탐색(리스트 컴프리헨션)
start, end = [(i, j) for i in range(16) for j in range(16) if maze[i][j] == 2 or maze[i][j] == 3]
# 시작 지점, 종료 지점 좌표 탐색(이중 for문)
# for i in range(16):
# for j in range(16):
# if maze[i][j] == 2:
# start = (i, j)
# elif maze[i][j] == 3:
# end = (i, j)
result = maze_search(maze, start, end)
print(f"#{tc} {result}")
https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AZC_w6Z6yygDFAQW&contestProbId=AV14vXUqAGMCFAYD&probBoxId=AZC_w6Z6yykDFAQW&type=PROBLEM&problemBoxTitle=1w_homework&problemBoxCnt=5