Python/BAEKJOON

[백준] 1012번 유기농 배추(python)

Magin 2022. 3. 16. 20:19
728x90

문제)

 

 

알고리즘)

그래프

목표: 농장에서 배추가 있는 구역의 수 구하기

 

입력부 이후

-배추의 위치를 찾고 그로부터 인접한 배추 위치 파악  현재 위치에서 십자가 형태로 탐색

반복문에서 빠져나오면 +1 => 반복문 탈출 인접해 있는 배추 한 구역을 모두 탐색한 것

 

최종적으로 result 출력 배추의 구역 수  

 

코드)

#유기농 배추
import sys
from collections import deque
input = sys.stdin.readline

move_row = [0, 1, 0, -1]
move_col = [-1, 0, 1, 0]


def bfs(row, col, graph):
    d = deque()
    d.append([row,col])
    graph[row][col] = 0

    while d:
        x,y = d.popleft()

        for i in range(4):
            test_row = x+move_row[i]
            test_col = y+move_col[i]

            if test_row < 0 or test_row >= n or test_col < 0 or test_col >= m:
                continue
        
            if graph[test_row][test_col] == 1:
                graph[test_row][test_col] = 0
                d.append([test_row, test_col])

    return


#입력부
t = int(input())

for _ in range(t):
    m, n, k = map(int, input().split()) 
    graph = [[0]*m for _ in range(n)]
    result = 0

    for _ in range(k): # 배추 위치 변환
        a, b = map(int, input().split())
        graph[b][a] = 1

    #탐색
    for x in range(n): 
        for y in range(m):
            if graph[x][y] == 1:
                bfs(x, y, graph)
                result += 1  

    print(result)

 

728x90