프로그래머스

[프로그래머스] 네트워크 Swift

띵지니어 2024. 11. 10. 23:32
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/43162

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

내 코드

func dfs(_ node: Int, visited: inout [Bool], graph: inout [[Int]]) {
visited[node] = true
for next in graph[node] {
if !visited[next] {
dfs(next, visited: &visited, graph: &graph)
}
}
}
func solution(_ n: Int, _ computers: [[Int]]) -> Int {
var graph = Array(repeating: [Int](), count: n + 1)
var visited = Array(repeating: false, count: n + 1)
var result: Int = 0
for i in 0..<n {
for j in 0..<n {
if computers[i][j] == 1 && i != j {
graph[i + 1].append(j + 1)
}
}
}
for i in 1...n {
if !visited[i] {
result += 1
dfs(i, visited: &visited, graph: &graph)
}
}
return result
}

 

Review

 

1부터 n까지 for 문을 돌려서, 방문을 안 한 노드가 있으면 result += 1을 해주는 방법으로 문제를 해결했습니다.

dfs함수는 일반적인 깊이우선탐색 알고리즘과 같아서 생략하겠습니다.

dfs함수의 매개변수를 줄이고 싶다면, 아래처럼 solution 함수 내에 함수를 작성하면 됩니다.

func solution(_ n: Int, _ computers: [[Int]]) -> Int {
var graph = Array(repeating: [Int](), count: n + 1)
var visited = Array(repeating: false, count: n + 1)
var result: Int = 0
for i in 0..<n {
for j in 0..<n {
if computers[i][j] == 1 && i != j {
graph[i + 1].append(j + 1)
}
}
}
func dfs(_ node: Int) {
visited[node] = true
for next in graph[node] {
if !visited[next] {
dfs(next)
}
}
}
for i in 1...n {
if !visited[i] {
result += 1
dfs(i)
}
}
return result
}
반응형
목차(index)