본문 바로가기

알고리즘 문제풀이

Swea D3_11879. 미로 Python

dr = [0,1,0,-1] # direction r
dc = [1,0,-1,0]
def mazeGo(N):
    global flag
    for i in range(N):
        for j in range(N):
            if maze_arr[i][j] == 2:
                r,c = i,j
    # 이동경로
    stack = []
    # 방문확인
    visited = [[0] * N for _ in range(N)]
    # 시작점 표시
    stack.append((r,c))
    visited[r][c] = 1 # 출발점은 방문했기 때문
    # 시작점이 (0,0) 이 아니기 때문에 for문 사용할 필요가 없음
    while stack:# stack이 남아 있는동안만
 
        cur_r,cur_c = stack[-1] # pop 하면 이 길이 아닐경우 다시 append해줘야되서
        #도착완료했으면 return 1
        if maze_arr[cur_r][cur_c] == 3:
            flag = 1
            return flag
        isok = 0 # 해당 위치에서 갈 곳이 없는지 확인
        # 4방향 체크
        for k in range(4):
            nr = cur_r + dr[k]
            nc = cur_c + dc[k]
            if 0 <= nr < N and 0 <= nc < N and maze_arr[nr][nc] != 1: # 벽체크
                # 해야 되는 것
                if visited[nr][nc] != 1: # 방문한 곳이 아니라면
                    stack.append((nr,nc))
                    visited[nr][nc] = 1
                    isok = 1
                    break
        if not isok: # 갈 곳이 없으면?
            stack.pop()
    return flag
T = int(input())
for tc in range(1,T+1):
    N = int(input())
    flag = 0 # 기본적으로 도착 못 한다.
    maze_arr = [list(map(int,input())) for _ in range(N)]
    stack = []
    print(f'#{tc} {mazeGo(N)}')