💬 문제
https://www.acmicpc.net/problem/2667
💬 Idea
- 입력을 2차원 배열로 만든다
- 방문 좌표 배열을 만든다
- house 좌표를 for문을 돌며 방문되지 않았고 좌표가 1인 경우, 해당 집의 단지 크기를 구하기 위해 dfs를 수행한다.
<dfs 함수 동작 원리>
- 상하좌우를 이동하며 깊이탐색을 한다.
- 이동 시 count를 1 증가한다.
- 만약 상하좌우 좌표가 이동할 수 없는 좌표라면 함수를 탈출해준다.
💬 풀이
import Foundation
func solution2667(){letN=Int(readLine()!)!
varhouseArr:[[Int]]=[]for_in0..<N {lethouse=readLine()!
houseArr.append(Array(house).map({Int(String($0))! }))}varvisited=Array(repeating:Array(repeating:false, count:houseArr[0].count), count: houseArr.count)varcount=0func dfs(xy:[Int]){letx=xy[0]lety=xy[1]if x <0 || y <0 || x > houseArr.count -1 || y >houseArr[0].count -1{return}if !visited[x][y] && houseArr[x][y]==1{visited[x][y]=true
count +=1dfs(xy:[x +1, y])dfs(xy:[x -1, y])dfs(xy:[x, y +1])dfs(xy:[x, y -1])}}varans:[Int]=[]for(idx, i)in houseArr.enumerated(){for(jdx, _)in i.enumerated(){if !visited[idx][jdx] && houseArr[idx][jdx]==1{
count =0dfs(xy:[idx, jdx])
ans.append(count)}}}print(ans.count)forain ans.sorted(){print(a)}}소요시간 : 20분
💬 문제https://www.acmicpc.net/problem/2667
💬 Idea<dfs 함수 동작 원리>
💬 풀이소요시간: 20분