Algorithm for Coding Test/Swea

SWEA 1953 [모의 SW 역량테스트] 탈주범 검거

달린다 동구리 2021. 10. 7. 20:11
728x90
반응형

이 코드는 Python으로 작성했습니다.

dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]
connect = [2, 3, 0, 1]
pipe = [
    [0, 0, 0, 0],
    [1, 1, 1, 1],  # 상하좌우
    [0, 1, 0, 1],  # 상하
    [1, 0, 1, 0],  # 좌우
    [1, 0, 0, 1],  # 상우
    [1, 1, 0, 0],  # 하우
    [0, 1, 1, 0],  # 하좌
    [0, 0, 1, 1],  # 상좌
]

T = int(input())

for tc in range(1, T + 1):
    N, M, R, C, L = map(int, input().split())
    tunnel = [list(map(int, input().split())) for _ in range(N)]
    visited = [[0] * M for _ in range(N)]

    Q = [(R, C)]
    visited[R][C] = 1

    ans = 0

    while Q:
        r, c = Q.pop(0)
        ans += 1
        if visited[r][c] >= L: continue

        for d in range(4):
            curr_p = tunnel[r][c]
            if pipe[curr_p][d] == 0: continue

            nr = r + dr[d]
            nc = c + dc[d]

            if nr < 0 or nr >= N or nc < 0 or nc >= M: continue

            nd = connect[d]
            np = tunnel[nr][nc]

            if visited[nr][nc] or pipe[np][nd] == 0: continue

            visited[nr][nc] = visited[r][c] + 1
            Q.append((nr,nc))

    print("#{} {}".format(tc, ans))

 

문제 출처 : SW Expert Academy

 

SW Expert Academy

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

swexpertacademy.com

 

728x90
반응형