SWEA

SWEA 1861. 정사각형방 [Python]

Hoo_Dev 2022. 3. 24. 23:59
def bfs(y, x):
    queue = []
    room_lst = []
    queue.append((y, x))
    room_lst.append(arr[y][x])
    visited[y][x] = 1
    while queue:
        cy, cx = queue.pop(0)
        for dy, dx in [(-1, 0), (1, 0), (0, 1), (0, -1)]:
            ny, nx = cy + dy, cx + dx
            if 0 <= ny < N and 0 <= nx < N and abs(arr[ny][nx] - arr[cy][cx]) == 1 and visited[ny][nx] == 0:
                queue.append((ny, nx))
                room_lst.append(arr[ny][nx])
                visited[ny][nx] = 1
    return min(room_lst), len(room_lst)


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

    room_cnt = 0
    room_n = 1001
    for i in range(N):
        for j in range(N):
            c_num, c_cnt = bfs(i, j)
            if room_cnt < c_cnt or room_cnt == c_cnt and room_n > c_num:
                room_n = c_num
                room_cnt = c_cnt
    print('#{} {} {}'.format(tc, room_n, room_cnt))

arr을 순회시키며 bfs적용. 방문 표시를 통해 방문표시 된 곳은 재방문 x, 좌표당 방문한 방의 총 개수와 방 번호를 비교하여 최종적으로 최대 방 개수와, 최소 방 번호 출력