입출력 조건은 다음과 같다.
- 각 테스트 케이스에 대해 M x N 크기의 2차원 리스트 field를 생성했다.
- 입력받은 배추의 위치를 field에 표시하여 1로 설정한다.
- field를 순회하면서 아직 방문하지 않은 배추(1)를 발견하면
-해당 위치에서 DFS를 시작합니다.
-DFS는 연결된 모든 배추를 방문했다고 0으로 변경한다.
-DFS가 종료되면 하나의 연결된 배추 그룹을 모두 처리한 것이므로 count를 +1한다. - 모든 배추를 처리할 때까지 반복문으로 처리한다.
import sys
sys.setrecursionlimit(10000)
def dfs(x, y):
# 주어진 범위를 벗어나는 경우 즉시 종료
if x < 0 or x >= M or y < 0 or y >= N:
return
# 현재 노드를 아직 방문하지 않았다면
if field[y][x] == 1:
# 해당 노드 방문 처리
field[y][x] = 0
# 상하좌우 위치 모두 재귀적으로 호출
dfs(x-1, y)
dfs(x, y-1)
dfs(x+1, y)
dfs(x, y+1)
T = int(input())
for _ in range(T):
M, N, K = map(int, input().split())
field = [[0] * M for _ in range(N)]
# 배추 위치 입력
for _ in range(K):
X, Y = map(int, input().split())
field[Y][X] = 1
count = 0
for y in range(N):
for x in range(M):
if field[y][x] == 1:
dfs(x, y)
count += 1
print(count)
'프로그래머스, 백준' 카테고리의 다른 글
백준 1051번 숫자 정사각형 (0) | 2024.10.30 |
---|---|
백준 1045번 도로 (0) | 2024.10.30 |
백준 1011번 Fly me to the Alpha Centauri (0) | 2024.10.02 |
백준 1932번 정수 삼각형 (0) | 2024.09.25 |
백준 2798번 블랙잭 (0) | 2024.05.08 |