어려워하던 dfs 를 맞았다..!
import Foundation
var N = Int(readLine()!)!
var line = [String]()
var graph:[[String]] = Array(repeating: [], count: N)
var visit = Array(repeating: Array(repeating: false, count: N), count: N)
var abnormalVisit = Array(repeating: Array(repeating: false, count: N), count: N)
for row in 0..<N {
line = readLine()!.map{String($0)}
graph[row] = line
}
print(graph)
func dfs(x:Int,y:Int,color:String){
visit[x][y] = true
if x < N - 1 && graph[x+1][y] == color {
if visit[x+1][y] == false{
dfs(x: x+1, y: y, color: color)
}
}
if x > 0 && graph[x-1][y] == color {
if visit[x-1][y] == false{
dfs(x: x-1, y: y, color: color)
}
}
if y < N - 1 && graph[x][y+1] == color {
if visit[x][y+1] == false{
dfs(x: x, y: y+1, color: color)
}
}
if y > 0 && graph[x][y-1] == color {
if visit[x][y-1] == false{
dfs(x: x, y: y-1, color: color)
}
}
}
//
func abnormalDfs(x:Int,y:Int,color:String){
abnormalVisit[x][y] = true
if (graph[x][y] == "R" || graph[x][y] == "G") {
if x < N - 1 && graph[x+1][y] != "B" {
if abnormalVisit[x+1][y] == false{
abnormalDfs(x: x+1, y: y, color: color)
}
}
if x > 0 && graph[x-1][y] != "B" {
if abnormalVisit[x-1][y] == false{
abnormalDfs(x: x-1, y: y, color: color)
}
}
if y < N - 1 && graph[x][y+1] != "B" {
if abnormalVisit[x][y+1] == false{
abnormalDfs(x: x, y: y+1, color: color)
}
}
if y > 0 && graph[x][y-1] != "B" {
if abnormalVisit[x][y-1] == false{
abnormalDfs(x: x, y: y-1, color: color)
}
}
}
else if graph[x][y] == "B" {
if x < N - 1 && graph[x+1][y] == color {
if abnormalVisit[x+1][y] == false{
abnormalDfs(x: x+1, y: y, color: color)
}
}
if x > 0 && graph[x-1][y] == color {
if abnormalVisit[x-1][y] == false{
abnormalDfs(x: x-1, y: y, color: color)
}
}
if y < N - 1 && graph[x][y+1] == color {
if abnormalVisit[x][y+1] == false{
abnormalDfs(x: x, y: y+1, color: color)
}
}
if y > 0 && graph[x][y-1] == color {
if abnormalVisit[x][y-1] == false{
abnormalDfs(x: x, y: y-1, color: color)
}
}
}
}
var normal = 0
var abnormal = 0
for x in 0..<N{
for y in 0..<N{
if visit[x][y] == false{
var color = graph[x][y]
dfs(x:x,y:y,color:color)
normal += 1
}
}
}
for x in 0..<N{
for y in 0..<N{
if abnormalVisit[x][y] == false{
var color = graph[x][y]
abnormalDfs(x:x,y:y,color:color)
abnormal += 1
}
}
}
print(normal,abnormal,terminator: " ")
깨달은것.