유기농 배추 문제는 DPS 문제로 해결할 수 있습니다
처음 문제를 해결할 때 가장 헷갈렸던 부분은 2차원 배열을 생성하는 과정이였습니다. 2차원 배열을 만드려면 다음과 같습니다.
var array = Array(repeating: Array(repeating: 0, count: columns), count: rows)
2차원 배열을 만든 다음으로는 재귀함수를 이용한 DPS를 통해 문제를 해결할 수 있었습니다.
func find(row: Int, column: Int) {
array[row][column] = 0
if column-1 > -1 && array[row][column-1] == 1 {
find(row: row, column: column-1)
}
if column+1 < columns && array[row][column+1] == 1 {
find(row: row, column: column+1)
}
if row+1 < rows && array[row+1][column] == 1 {
find(row: row+1, column: column)
}
if row-1 > -1 && array[row-1][column] == 1 {
find(row: row-1, column: column)
}
}
전체 코드
import Foundation
let num = Int(readLine()!)!
for _ in 1...num {
var tc = readLine()!.split(separator: " ").map { Int($0)! }
var rows = tc[1] // 행
var columns = tc[0] // 열
var array = Array(repeating: Array(repeating: 0, count: columns), count: rows)
func find(row: Int, column: Int) {
array[row][column] = 0
if column-1 > -1 && array[row][column-1] == 1 {
find(row: row, column: column-1)
}
if column+1 < columns && array[row][column+1] == 1 {
find(row: row, column: column+1)
}
if row+1 < rows && array[row+1][column] == 1 {
find(row: row+1, column: column)
}
if row-1 > -1 && array[row-1][column] == 1 {
find(row: row-1, column: column)
}
}
for _ in 1...tc[2] {
let tmp = readLine()!.split(separator: " ").map { Int($0)! }
array[tmp[1]][tmp[0]] = 1
}
var count = 0
for i in 0..<rows {
for j in 0..<columns {
if array[i][j] == 1 {
find(row: i, column: j)
count+=1
}
}
}
print(count)
}
'Algorithm > Baekjoon' 카테고리의 다른 글
Swift - 백준 1620번 (0) | 2024.08.28 |
---|---|
Swift - 1260번 DFS와 BFS (0) | 2024.08.27 |
Swift - 백준 1003번 피보나치 함수 (0) | 2024.08.25 |
Swift - 백준 4949번 균형잡힌 세상 (0) | 2024.08.22 |
Swift - 백준 2108번 통계학 (0) | 2024.08.22 |