๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/Algorithm

[Algorithm/Swift] BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) Swift๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค:)

์˜ค๋Š˜์€ ์ €๋ฒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํฌ์ŠคํŒ…(DFS)์— ์ด์–ด BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค!

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ธ BFS๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์šฐ์„  ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ์ดํ•ด๋ถ€ํ„ฐ ํ•„์š”ํ•˜๋‹ˆ

ํ˜น์‹œ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋กœ ๊ฑธ์–ด๋‘” ์ด์ „ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!!

 

[Algorithm/Swift] DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) Swift๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

์š”์ฆ˜ ๋ผ๋Š” ์ฑ…์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ฟŒ์ˆ˜๊ณ  ์žˆ๋Š”๋ฐ์š”, ์ด ์ฑ…์ด ํŒŒ์ด์ฌ ์–ธ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…๋˜์–ด์žˆ์–ด์„œ ๊ฐœ๋…์„ ํ•™์Šตํ•˜๊ณ , ์˜ˆ์ œ๋‚˜ ์‹ค์ „ ๋ฌธ์ œ๋“ค์„ Swift์–ธ์–ด๋กœ ํ’€์ดํ•ด๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐจ๊ทผ

janechoi.tistory.com

BFS

BFS(Breadth First Search)๋Š” '๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰'์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด ๊ทธ๋ž˜ํ”„์˜ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค!

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ์ •๋ฆฌํ–ˆ์—ˆ๋˜ DFS๋Š” ๊ทธ๋ž˜ํ”„์˜ ๊ฐ€์žฅ ๊นŠ์€ ๊ณณ, ์ฆ‰ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—ˆ๋Š”๋ฐ์š”, BFS๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ ๋ฐฉ์‹์˜ ํƒ์ƒ‰ ์ˆœ์„œ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ณด์ž๋ฉด, ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค!

1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ํƒ์ƒ‰ํ•˜๊ณ , ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ๋ฐฉ๊ธˆ ํƒ์ƒ‰ํ–ˆ๋˜ ๋…ธ๋“œ์˜ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ, ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

์œ„์˜ ์˜ˆ์‹œ์—์„œ 2, 3๋ฒˆ์ด ๋ฐ”๋€Œ์–ด๋„ ๋˜๊ณ , 4, 5, 6๋ฒˆ ๋…ธ๋“œ๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ ๋จผ์ € ํƒ์ƒ‰ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค๋Š” ๊ฒƒ์ด์ฃ !

์ฆ‰, ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค ์ค‘์—์„œ๋Š” ์–ด๋Š ๊ฒƒ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š๋ƒ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ , ํ˜„์žฌ ๋…ธ๋“œ์—์„œ ์ธ์ ‘ํ•œ ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด, ๋‹ค์Œ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋“ค์˜ ํƒ์ƒ‰์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

BFS ๊ตฌํ˜„๋ฐฉ๋ฒ•

๊ทธ๋ ‡๋‹ค๋ฉด BFS๋Š” ์‹ค์ œ๋กœ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”??

BFS๋Š” ๋ณดํ†ต ์„ ์ž…์„ ์ถœ(FIFO) ๋ฐฉ์‹์ธ ํ(Queue) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค!

์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ์— ๋„ฃ๋„๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ์ด ๋จผ์ € ๋‚˜๊ฐ€๊ฒŒ ๋˜์–ด, ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ •ํ™•ํ•œ ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ ์ค‘์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

3. 2๋ฒˆ์˜ ๊ณผ์ •์„ ๋” ์ด์ƒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋กœ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ BFS๋ฅผ ์ดํ•ดํ•ด๋ด…์‹œ๋‹ค!

 

์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•˜์—ฌ BFS๋ฅผ ์ด์šฉํ•ด ํƒ์ƒ‰์„ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ฐ€์žฅ ๋จผ์ € ์‹œ์ž‘ ๋…ธ๋“œ์ธ 1์„ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. 

ํ์—์„œ ๋…ธ๋“œ 1์„ ๊บผ๋‚ด๊ณ  ๋‹ค์Œ์œผ๋กœ 1๋ฒˆ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์„ ํ์— ์‚ฝ์ž…ํ•ด์•ผํ•˜๋Š”๋ฐ,

์œ„์˜ ๊ทธ๋ž˜ํ”„์—์„œ 1๋ฒˆ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ์ธ์ ‘ ๋…ธ๋“œ๋Š” 2, 3, 8 ์ด๋ ‡๊ฒŒ ์„ธ ๊ฐœ๊ฐ€ ์žˆ์œผ๋‹ˆ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์œผ๋กœ, ์‚ฝ์ž…ํ•œ ๋…ธ๋“œ๋“ค ์ค‘ ๋จผ์ € 2๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ 2๋ฒˆ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ์ธ 7์„ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ 3๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด์ฃผ๊ณ  3๋ฒˆ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์ธ 4, 5๋ฅผ ํ์— ์‚ฝ์ž… ํ›„ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

์ด์ œ 8๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด์ค„ ์ฐจ๋ก€์ธ๋ฐ, 8๋ฒˆ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ์—†์œผ๋ฏ€๋กœ ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ ์‚ฝ์ž…ํ•  ๋…ธ๋“œ๋Š” ์—†๊ฒ ์ฃ ?

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ”๋กœ ๋‹ค์Œ ๋…ธ๋“œ์ธ 7๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด ์ค๋‹ˆ๋‹ค. 7๋ฒˆ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์ธ 6์„ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ์— ๋‚จ์•„์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ฐจ๋ก€๋กœ ๊บผ๋‚ด์ฃผ๋ฉด ํƒ์ƒ‰ ๊ณผ์ •์ด ๋๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ(=ํ์— ์‚ฝ์ž…๋œ ์ˆœ์„œ)๋Š” 1 -> 2 -> 3 -> 8 -> 7-> 4 -> 5 -> 6 ์ด ๋ฉ๋‹ˆ๋‹ค.

 

์œ„์˜ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

// 2์ฐจ์› ๋ฐฐ์—ด
let graph = [[],
             [2, 3, 8],
             [1, 7],
             [1, 4, 5],
             [3, 5],
             [3, 4],
             [7],
             [2, 6, 8],
             [1, 7]]

func bfs(_ graph: [[Int]], _ start: Int) -> [Int] {
    
    var visitedQueue = [Int]() // ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด
    var needVisitQueue = [start] // ๋ฐฉ๋ฌธํ•  ๋…ธ๋“œ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด
    
    while !needVisitQueue.isEmpty {
        let node = needVisitQueue.removeFirst() // ํ๋Š” FIFO๋กœ ๋™์ž‘
        if visitedQueue.contains(node) { continue } // ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ผ๋ฉด ์•„๋ž˜ ๊ณผ์ • ๊ฑด๋„ˆ ๋œ€
        
        visitedQueue.append(node) // ํ˜„์žฌ ๋…ธ๋“œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
        needVisitQueue += graph[node]
    }
    
    return visitedQueue
}

// ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ 1๋กœ ์„ค์ •ํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ
bfs(graph, 1) // [1, 2, 3, 8, 7, 4, 5, 6]

 


[์ฐธ๊ณ  ์ž๋ฃŒ]

 

Swift) ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ๊ตฌํ˜„ ํ•ด๋ณด๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” :) ์†Œ๋“ค์ž…๋‹ˆ๋‹ค!!! ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„  ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ด์š”!!!! ๋จผ์ €, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ž€ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ๋ฐ, ๊ทธ๋ž˜ํ”„๋ฅผ ๋ชจ๋ฅด๋ฉด ์ดํ•ดํ•  ์ˆ˜ ์—†์œผ๋‹ˆ

babbab2.tistory.com

<์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ>

 

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ | ๋‚˜๋™๋นˆ - ๊ต๋ณด๋ฌธ๊ณ 

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ | IT ์ทจ์ค€์ƒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ž…์‚ฌํ•˜๊ณ  ์‹ถ์€ ์นด์นด์˜คใ†์‚ผ์„ฑ์ „์žใ†๋„ค์ด๋ฒ„ใ†๋ผ์ธ! ์ทจ์—…์˜ ์„ฑ๊ณต ์—ด์‡ ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ์— ์žˆ๋‹ค!IT ์ทจ์ค€์ƒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜

product.kyobobook.co.kr