1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ์ ํ์ ์ธ ๊ทธ๋ํ ํ์ ๋ฌธ์ ๋ก DFS or BFS๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
- ์ธ์ ํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋ ๋ง๋ค, count ๊ฐ์ ์ฆ๊ฐ์์ผ์ค์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ณ , O(N + M)์ ์๊ฐ๋ณต์ก๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
5. ์ ์ฒด ์ฝ๋
//MARK: - ์ ๋ฐ์ด๋ฌ์ค - BFS
//MARK: - Framework
import Foundation
//MARK: - Type
struct Graph {
var edges: [Int] = []
}
//MARK: - Variable
var graph: [Graph] = []
var visited: [Bool] = []
//MARK: - Function
func bfs(_ start: Int) -> Int {
var result: Int = 0
var queue: [Int] = []
queue.append(start)
visited[start] = true
while !queue.isEmpty {
let current: Int = queue.removeFirst()
for i in stride(from: 0, to: graph[current].edges.count, by: 1) {
let next: Int = graph[current].edges[i]
if !visited[next] {
visited[next] = true
queue.append(next)
result += 1
}
}
}
return result
}
func solution() -> Void {
//MARK: - Input
guard let N: Int = Int(readLine() ?? "0") else { return }
guard let M: Int = Int(readLine() ?? "0") else { return }
var result: Int = 0
graph = Array(repeating: Graph(), count: N + 10)
visited = Array(repeating: false, count: N + 10)
for _ in 0..<M {
guard let data: [String] = readLine()?.components(separatedBy: " ") else { return }
let a: Int = data.map { Int($0) }[0] ?? 0
let b: Int = data.map { Int($0) }[1] ?? 0
graph[a].edges.append(b)
graph[b].edges.append(a)
}
//MARK: - Process
result = bfs(1)
//MARK: - Output
print(result)
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Graph Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ_BFS (0) | 2022.04.15 |
---|---|
๋ฏธ๋ก ์ฐพ๊ธฐ (0) | 2022.04.15 |
์ด๋ถ ๊ทธ๋ํ ํ๋ณ_BFS (0) | 2022.04.15 |
2์์น ํ๊ธฐ_BFS (0) | 2022.04.15 |
๊น์ด์ฐ์ ํ์๊ณผ ๋๋น์ฐ์ ํ์ (0) | 2022.04.15 |