์ด ๊ธ์ ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์์ฑ๋ ๊ธ์์ ๋ฐํ๋๋ค.
์์ธํ ๋ด์ฉ์ https://babbab2.tistory.com/106 ์ด๊ณณ์์ ํ์ธํด์ฃผ์ธ์!
๋๋น์ฐ์ ํ์(BFS)
Breadth-First Search
์ธ์ ํ ๋ ธ๋๋ฅผ ์ฐ์ ํ์ฌ ํ์ํ๋ ๋ฐฉ์์ ๋๋ค.
ํ์ ๋ ธ๋๋ก๋ถํฐ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋จผ์ ํ์ํ๊ณ , ๋ค ํ์ํ๋ฉด ์ธ์ ํ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ค๋ถํฐ ํ์ํฉ๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋๋ค๋ถํฐ ํ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
์ฐธ๊ณ ๋ก ์ผ์ชฝ๋ถํฐ ํ์ํ ์ง, ์ค๋ฅธ์ชฝ๋ถํฐ ํ์ํ ์ง ๊ฐ์ ์์๋ ์ค์ํ์ง ์์ต๋๋ค.
๊ตฌํ
1. ํ์ํ ๊ทธ๋ํ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ธฐ
let graph: [String: [String]] = [
"A" : ["B", "C"],
"B" : ["A", "D", "E"],
"C" : ["A", "F"],
"D" : ["B"],
"E" : ["B"],
"F" : ["C"],
]
์ ๊ทธ๋ฆผ์ ์ธ์ ๋ฆฌ์คํธ๋ฐฉ์์ผ๋ก ๊ทธ๋ํ๋ฅผ ๋ง๋ค์์ต๋๋ค.
2. ๋๋น์ฐ์ ํ์ํ๊ธฐ
๋๋น์ฐ์ ํ์์ ๋๊ฐ์ ํ(Queue)๋ก ๊ตฌํํฉ๋๋ค.
needVisitQueue : ๋ฐฉ๋ฌธํด์ผํ๋ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ ํ
visitedQueue : ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ ํ
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ ์์๋ก ํ์์ ์งํํฉ๋๋ค.
1. ํ์ํ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ needVisitQueue์ ๋ฃ๋๋ค.
2. needVisitQueue์ ์ฒซ๋ฒ์งธ ๊ฐ์ ์ถ์ถํด์(FIFO), visitedQueue์ ํด๋น ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ค.
[visitedQueue์ ๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ] - ์ถ์ถํ ๊ฐ์ ๋ฒ๋ฆฌ๊ณ ๋ค์ visitedQueue์ ์กด์ฌํ๋ ์ง ํ์ธ ํจ
[visitedQueue์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ] - 3๋ฒ ๊ณผ์ ์ผ๋ก ๋์ด๊ฐ๋ค.
3. ์ถ์ถํ ๊ฐ์ visitedQueue์ ์ถ๊ฐํ๋ค.
4. ์ถ์ถํ ๊ฐ์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ค์ ๋ชจ๋ needVisitQueue์ ์ถ๊ฐํ๋ค.
5.
[needVisitQueue๊ฐ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ] - 2๋ฒ ๊ณผ์ ์ผ๋ก ๋์๊ฐ๋ค.
[needVisitQueue๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ] - visitedQueue์ ์ฑ์์ง ๊ฐ๋ค์ด ๋๋น์ฐ์ ํ์์ ํตํด ํ์๋ ๋ ธ๋ ์์๋ผ๊ณ ๊ฒฐ๋ก ์ง๋๋ค.
์์ ๊ณผ์ ๋ค์ ์ฝ๋๋ก ๊ตฌํํ๊ธฐ
func BFS(graph: [String: [String]], start: String) -> [String] {
var visitedQueue: [String] = []
var needVisitQueue: [String] = [start]
while !needVisitQueue.isEmpty {
let node: String = needVisitQueue.removeFirst()
if visitedQueue.contains(node) { continue }
visitedQueue.append(node)
needVisitQueue += graph[node] ?? []
}
return visitedQueue
}
๋๋น์ฐ์ ํ์(BFS)์ ์๊ฐ๋ณต์ก๋
์ผ๋ฐ์ ์ผ๋ก ๋ ธ๋ ์(V), ๊ฐ์ ์(E)๋ผ ํ์ ๋์ ์๊ฐ๋ณต์ก๋๋ O(V+E)๊ฐ ๋๋ค.
์ ๋ ฅ ์์ฒด๋ฅผ ๋ ธ๋์ ๊ฐ์ ์ผ๋ก ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
'๐ป CS > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑํธ๋ํน (0) | 2023.05.09 |
---|---|
[Swift] ๋์ ๊ณํ๋ฒ (Dynamic Programming) ์ดํดํ๊ธฐ (0) | 2023.04.12 |
[Swift] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2023.04.04 |
[Swift] (๋ถํ ์ ๋ณต) ํต ์ ๋ ฌ ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.04.03 |
[Swift] ๊น์ด์ฐ์ ํ์(DFS) ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.03.30 |