JehooJeon / algorithm_review

알고리즘 수업 코드리뷰
0 stars 0 forks source link

1226. 미로1 #3

Open JehooJeon opened 1 month ago

JehooJeon commented 1 month ago

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AZC_w6Z6yygDFAQW&contestProbId=AV14vXUqAGMCFAYD&probBoxId=AZC_w6Z6yykDFAQW&type=PROBLEM&problemBoxTitle=1w_homework&problemBoxCnt=5

JehooJeon commented 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}")