SWEA

[SWEA] 4875 미로(백트래킹) - python

peach_h 2023. 2. 19. 20:15

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIc7KqfQDFAWg 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

1. 출발지점, 도착지점 찾기

2. stack에 현재 좌표 넣기

3. 스택에서 현재 좌표 pop

4. 주변에 갈 수 있는 곳 찾기

5. 갈 수 있으면 stack에 추가 후, 방문 표시

6. 갈 수 없으면 pass

-> 다시 처음으로 돌아가 마지막으로 방문한 좌표 스택에서 꺼내고, 

갈 수 있는곳 찾기 반복

 

7. 반복문이 끝난 후 목표 지점에 방문했는지 안했는지 검사

 

T = int(input())
for test_case in range(1, T+1):
    N = int(input())
    arr = [list(map(int, input())) for _ in range(N)]
    stack = []
    visited = [[False] * N for _ in range(N)]
    dy = [1, 0, -1, 0]
    dx = [0, 1, 0, -1]
    # 출발 지점, 도착 지점 찾기
    for y in range(N):
        for x in range(N):
            if arr[y][x] == 2:
                start_y = y
                start_x = x
            if arr[y][x] == 3:
                goal_y = y
                goal_x = x
    # 출발 좌표 stack에 넣기
    stack.append([start_y, start_x])

    while stack:
        # stack에서 마지막 좌표 꺼내기
        y, x = stack.pop()
        for k in range(4):
            ny, nx = y + dy[k], x + dx[k]
            # 도착점에 도착하면 방문 표시 후 break
            if ny == goal_y and nx == goal_x:
                visited[ny][nx] = True
                break
            # ny, nx가 N보다 작고
            if 0 <= ny < N and 0 <= nx < N:
                # 다음 지점이 0이고, 방문하지 않았으면
                if arr[ny][nx] == 0 and visited[ny][nx] == False:
                    # 스택에 지점 추가 + 방문표시
                    stack.append([ny,nx])
                    visited[ny][nx] = True
                # 갈 곳이 없으면 pass
                else:
                    continue
                    
    # 다 돈후 목표 지점을 방문했으면 1
    if visited[goal_y][goal_x] == True:
        print(f'#{test_case} 1')
    else:
        print(f'#{test_case} 0')

 

'SWEA' 카테고리의 다른 글

[SWEA] 1860 진기의 최고급 붕어빵  (0) 2023.03.03
[SWEA] 4881 배열 최소 합 - python  (2) 2023.02.20
[SWEA] 4874 Forth - python  (0) 2023.02.19
[SWEA] 4873 반복 문자 지우기 -python  (0) 2023.02.18
[SWEA] 4866 괄호검사 - python  (0) 2023.02.18