이 문제를 처음보고 바로 떠오른 것은 DFS 방식이다.
1. 배추가 위치한 곳에 도착하면 상하좌우를 재귀함수로 방문한다.
2. 방문한 배추의 위치를 0으로 변경한다.
3. 방문할 수 있는 배추의 위치를 모두 방문 완료 시 COUNT값을 1 증가시키다.
3. 배열의 끝에 도착 시 COUNT 저장한다.
4. 위 1-4번 과정을 테스트 케이스 T만큼 반복한다.
5. COUNT 출력
재귀 함수 부분을 다음과 같이 구현
def dfs(y1, x1, ground, m, n):
ground[y1][x1] = 0
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
for i in range(4):
y2 = y1 + dy[i]
x2 = x1 + dx[i]
if y2 < 0 or m <= y2 or x2 < 0 or n <= x2:
continue
if ground[y2][x2] == 1:
dfs(y2, x2, ground, m, n)
import sys
sys.setrecursionlimit(10**5)
import sys
sys.setrecursionlimit(10**5)
def dfs(y1, x1, ground, m, n):
ground[y1][x1] = 0
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
for i in range(4):
y2 = y1 + dy[i]
x2 = x1 + dx[i]
if y2 < 0 or m <= y2 or x2 < 0 or n <= x2:
continue
if ground[y2][x2] == 1:
dfs(y2, x2, ground, m, n)
for _ in range(int(input())):
ans = 0
arr = []
m, n, k = map(int, input().split())
ground = [[0 for _ in range(n)] for __ in range(m)]
for _ in range(k):
x, y = map(int, input().split())
ground[x][y] = 1
arr.append([x, y])
for i in range(k):
arr[i].reverse()
for x, y in arr:
if ground[y][x] == 1:
dfs(y, x, ground, m, n)
ans += 1
print(ans)