1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ๊ทธ๋ํ์ ๊ฐ์ ์งํฉ์ ๋ ธ๋์ ๊ฐ์ ์ด ์กด์ฌํ๋์ง ํ๋จํ๊ธฐ ์ํด์๋ ๊ทธ๋ํ๋ฅผ ํ๋ํ๋ ํ์ํด ๋ด์ผ ํจ
- ๋ฐ๋ผ์ ๋๋น์ฐ์ ํ์์ ํตํด ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ , ์ฌ๊ธฐ์ ๊ฐ์ ์งํฉ์ธ์ง ์๋์ง๋ ์ฒ์๋ถํฐ ์ ์ ์์ผ๋ฏ๋ก
- ๋ ธ๋์ ๋ฒํธ๋ง๋ค ๊ทธ๋ฃน(0 ํน์ 1)์ ๋ถ์ฌํ๋ ๋ฐฐ์ด์ ํตํด ๊ฐ์ ์งํฉ์ธ ๊ฒ์ ํ์ธํ ์ ์์
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋, ํ์ฌ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ๊ทธ๋ฃน์ด 1์ด๋ผ๋ฉด 0์, 0์ด๋ผ๋ฉด 1์ ๋ถ์ฌํจ์ผ๋ก์จ ์งํฉ์ ๊ด๋ฆฌํ ์ ์๊ณ ,
- ์ฌ๊ธฐ์ ๊ฐ์ ์งํฉ์ด๋ผ๋ฉด, ๋ ธ๋๋ผ๋ฆฌ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ํ์ฌ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋ ์ค์ ๊ทธ๋ฃน์ด ๊ฐ์ ๊ฒ์ด ์๋ค๋ฉด
- ์ด๋ถ ๊ทธ๋ํ๊ฐ ๋ ์ ์์. ๋ฐ๋ผ์ O(N + M)์ ์๊ฐ๋ณต์ก๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
5. ์ ์ฒด ์ฝ๋
//MARK: - ์ด๋ถ ๊ทธ๋ํ ํ๋ณ - BFS
//MARK: - Framework
import Foundation
//MARK: - Type
struct Graph {
//MARK: - Property
var edges: [Int]
//MARK: - Initializer
init() {
self.edges = []
}
}
//MARK: - Variable
var graph: [Graph] = []
var visited: [Bool] = []
var groups: [Int] = []
//MARK: - Function
func bfs(_ start: Int) -> Bool {
var result: Bool = true
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)
groups[next] = groups[current] == 0 ? 1 : 0
} else {
if groups[next] == groups[current] {
result = false
break
}
}
}
if !result {
break
}
}
return result
}
func solution() -> Void {
//MARK: - Input
guard let input: [String] = readLine()?.components(separatedBy: " ") else { return }
let N: Int = input.map { Int($0) }[0] ?? 0
let M: Int = input.map { Int($0) }[1] ?? 0
graph = Array(repeating: Graph(), count: N + 10)
visited = Array(repeating: false, count: N + 10)
groups = Array(repeating: 0, 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 & Output
print(bfs(1) ? "Yes" : "No")
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Graph Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฏธ๋ก ์ฐพ๊ธฐ (0) | 2022.04.15 |
---|---|
์ ๋ฐ์ด๋ฌ์ค_BFS (0) | 2022.04.15 |
2์์น ํ๊ธฐ_BFS (0) | 2022.04.15 |
๊น์ด์ฐ์ ํ์๊ณผ ๋๋น์ฐ์ ํ์ (0) | 2022.04.15 |
๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ_DFS (0) | 2022.04.15 |