import Foundation
let T = Int(readLine()!)!
for _ in 1...T {
let MNK = readLine()!.components(separatedBy: " ").map { Int($0)! }
let M = MNK[0] // 배추밭 가로길이
let N = MNK[1] // 배추밭 새로길이
let K = MNK[2] // 배추가 심어져 있는 위치의 개수
// M * N 2차원 배열 생성
var graph = [[Int]](repeating: [Int](repeating: 0, count: M), count: N)
for _ in 1...K {
let XY = readLine()!.components(separatedBy: " ").map { Int($0)! }
let X = XY[0] // 배추 위치
let Y = XY[1]
graph[Y][X] = 1
}
func dfs(_ x: Int, _ y: Int) {
// (0, 0) ~ (M, N)을 벗어나면 리턴
if x < 0 || x >= M || y < 0 || y >= N {
return
}
// 배추가 있을 경우 동서남북 방향으로 dfs 호출하여 배추를 없애버림
// (이어져 있는건 한개로 쳐야하니까)
if graph[y][x] == 1 {
graph[y][x] = 0
dfs(x+1, y)
dfs(x-1, y)
dfs(x, y+1)
dfs(x, y-1)
}
}
var cnt = 0
// 2차원 배열의 모든 좌표를 돌며 배추가 있을 경우 dfs 호출
for i in 0..<N {
for j in 0..<M {
if graph[i][j] == 1 {
dfs(j, i)
cnt += 1
}
}
}
print(cnt)
}
반응형
'📝 코테 > BOJ' 카테고리의 다른 글
[Swift] 백준 1780 종이의 개수 (0) | 2023.04.04 |
---|---|
[Swift] 백준 1676 팩토리얼 0의 개수 (0) | 2023.03.30 |
[Swift] 백준1260 DFS와 BFS (0) | 2023.03.30 |
[Swift] 백준1389 케빈 베이컨의 6단계 법칙 (0) | 2023.03.30 |
[Swift] 백준 11650 좌표 정렬하기 (0) | 2023.03.29 |