Computer Science (CS)/์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜( Graph Search Algorithm )

yjdat 2022. 11. 10. 10:30

๐Ÿ“‹ ๋ชฉ ์ฐจ

โ“ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

Depth-First Search( DFS )

Breadth-First Search ( BFS )


 

โ“ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ 

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ๋ž€? ์–ด๋–ค ํ•œ ๊ทธ๋ž˜ํ”„์˜ ํ•ด๋‹น ๊ทธ๋ž˜ํ”„์˜ ์‹œ์ž‘ ์ •์ ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์‹œ์ž‘์ ์—์„œ ๊ฐ„์„ (Edge, E)์„ ํƒ€๊ณ  ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ (Vertex, V)๋“ค์„ ๋ชจ๋‘ ์ฐพ์•„์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Graph Search Algorithm)์—๋Š” ํ”ํžˆ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰( Breadth-First Search, BFS)๊ณผ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(Depth-First Search, DFS)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ถ Depth-First Search

DFS ์š”์•ฝ

-๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
-๋ฃจํŠธ ๋…ธ๋“œ(or ๋‹ค๋ฅธ ์ž„์˜์˜ ๋…ธ๋“œ)์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ๋ถ„๊ธฐ(branch)๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
-์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ดˆ

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ด์œ ๋Š” ๊ทธ๋ž˜ํ”„์˜ ์‹œ์ž‘์ ์—์„œ ๋‹ค์Œ ๋ธŒ๋žœ์น˜๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์—, ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์š”๋Š” ์‹œ์ž‘์  → ์‹œ์ž‘์ ์— ์—ฐ๊ฒฐ๋œ ์ •์  → ์‹œ์ž‘์ ์— ์—ฐ๊ฒฐ๋œ ์ •์ ์— ์—ฐ๊ฒฐ๋œ ์ •์ ~ ์‹์œผ๋กœ ์žฌ๊ท€ ํ˜น์€ ์Šคํƒ ํ†ตํ•ด ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋” ์ด์ƒ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์ด ์—†์„ ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋ฉด ๋‹ค์‹œ ๋˜๋Œ์•„๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ํƒ์ƒ‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ๊ตฌํ˜„ํ•˜๋Š๋ƒ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ธ์ ‘ ํ–‰๋ ฌ : O(V^2)
  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)

 

๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ๋ณด๋ฉด, ์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์€ ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ ์ •์ (๋…ธ๋“œ)๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด ๋งŒ์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ : ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ > ์ธ์ ‘ ํ–‰๋ ฌ

์†๋„ ์ธก๋ฉด์—์„œ ๋ณด๋ฉด, ์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์€ graph[1][2]์™€ ๊ฐ™์ด ๋ฐ”๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ์ •๋ณด๋ฅผ ์–ป๋Š” ์†๋„๊ฐ€ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

์ฆ‰, ์กฐํšŒ ์†๋„ : ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ < ์ธ์ ‘ ํ–‰๋ ฌ

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŠน์ • ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒ ํ•ด์•ผ ํ•  ๋•Œ๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.

์Šคํƒ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ DFS์˜ ๊ตฌ์ฒด์ ์ธ ๋™์ž‘ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์‹œ์ž‘์ ์ธ 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  2. ์Šคํƒ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ(1๋ฒˆ)์™€ ๋ฏธ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ ์ค‘ ๊ฐ€์žฅ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ 2๋ฒˆ ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  3. ์Šคํƒ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ(2๋ฒˆ)์™€ ๋ฏธ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ(7๋ฒˆ)๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  4. ์Šคํƒ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ(7๋ฒˆ)์™€ ๋ฏธ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ ์ค‘ ๊ฐ€์žฅ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ 6๋ฒˆ ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  5. ์Šคํƒ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ(6๋ฒˆ)์™€ ๋ฏธ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๊ฐ€ ์—†์„ ๋•Œ๋Š” ์ถ”์ถœ(pop)
  6. ์Šคํƒ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ(7๋ฒˆ)์™€ ๋ฏธ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ(8๋ฒˆ)๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
  7. ์ด์™€ ๊ฐ™์€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์Šคํƒ์— ์•„๋ฌด๊ฒƒ๋„ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

1) ์žฌ๊ท€ํ•จ์ˆ˜(Recursive Function)

์žฌ๊ท€ ํ•จ์ˆ˜๋ž€ ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋งŒ๋“ค์–ด์„œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ์ œ๋Œ€๋กœ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด, ํ•จ์ˆ˜๊ฐ€ ๋ฌดํ•œ์ด ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

(1) ์žฌ๊ท€ํ•จ์ˆ˜ ์‘์šฉ : ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์€ ๋‘ ๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐœ๋…์€ ๋‘ ๊ฐœ์˜ A, B๊ฐ€ ์กด์žฌํ•˜๊ณ , A๋ฅผ B๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ C๋ผ๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ( A > B )

์ด ๋•Œ, A์™€ B์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” B์™€ C์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์ฆ๋ช…์„ ์ฐพ์•„๋ด์•ผ ํ•œ๋‹ค.)

์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ์ด์šฉํ•ด์„œ ๊ณ„์†์ ์œผ๋กœ ๋‚˜๋ˆ—์…ˆ์„ ์ง„ํ–‰ํ•ด์„œ C๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ, ์ฆ‰ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ์˜ ๋‚˜๋ˆ„๋Š” ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”ถ Java๋กœ ๊ตฌํ˜„ํ•œ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

/**
     * ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ
     * @param bn : ํฐ ์ˆซ์ž
     * @param sn : ์ž‘์€ ์ˆซ์ž
     * @return
     * ํฐ ์ˆซ์ž๋ฅผ ์ž‘์€์ˆซ์ž๋กœ ๋‚˜๋ˆˆ ๊ฐ’์ด 0์ด๋ฉด ์ž‘์€์ˆซ์ž ๋ฆฌํ„ด, ์•„๋‹ˆ๋ฉด ์žฌ๊ท€ํ˜•ํƒœ๋กœ ์ž์‹ ์„ ํ˜ธ์ถœ
     */
    public int eucd(int bn, int sn) {
        // ํฐ์ˆซ์ž๋ฅผ ์ž‘์€์ˆซ์ž๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์‚ฐ
        int r = bn % sn;
        // ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด ์ž‘์€์ˆซ์ž๊ฐ€ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ด๋ฏ€๋กœ ์ž‘์€์ˆซ์ž ๋ฆฌํ„ด
        if (r == 0) {
            return sn;
        } else {
            // ๋‚˜๋จธ์ง€๊ฐ€ 0 ์ด์ƒ์ด๋ฉด ์žฌ๊ท€ํ˜•ํƒœ๋กœ ํ˜ธ์ถœ
            // ์ด๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ž‘์€์ˆซ์ž์™€ ๋‚˜๋จธ์ง€๋ฅผ ๋„ฃ์–ด์คŒ
            return eucd(sn, r);
        }
    }

์˜ˆ์‹œ)

72, 42 ๋‘ ๊ฐœ์˜ ์ˆ˜๋กœ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ๋จผ์ € ๋‘๊ฐœ์˜ ์ˆ˜ ์ค‘ ํฐ ์ˆ˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” 72์ž…๋‹ˆ๋‹ค.
  2. ํฐ ์ˆ˜๋ฅผ ์ž‘์€ ์ˆ˜๋กœ ๋‚˜๋ˆ ์„œ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. => 72 % 42 = 30(๋‚˜๋จธ์ง€)
  3. ๋‚˜๋จธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์•ž์—์„œ ๋‚˜๋ˆˆ ์ˆ˜๋ฅผ ๋‹ค์‹œ ๋‚˜๋ˆ ์„œ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. => 42 % 30 = 12(๋‚˜๋จธ์ง€)
  4. 3๋ฒˆ์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. => 30 % 12 = 6(๋‚˜๋จธ์ง€)
  5. 3๋ฒˆ์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. => 12 % 6 = 0(๋‚˜๋จธ์ง€)
  6. 5๋ฒˆ์˜ ๊ณผ์ •์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ทธ ์‹œ์ ์— ๋‚˜๋ˆˆ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  7. ์œ„์˜ ์ˆœ์„œ๋Œ€๋กœ๋ผ๋ฉด 72์™€ 42์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 6์ด ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ถ Breadth-First Search

BFS ์š”์•ฝ

- ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰
- ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
- ํ ์ž๋ฃŒ๊ตฌ์กฐ์— ๊ธฐ์ดˆํ•œ๋‹ค.
- ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์‹ค์ œ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์€ DFS๋ณด๋‹ค ์ข‹์€ ํŽธ์ด๋‹ค.

BFS๋Š” ๊ทธ๋ž˜ํ”„์˜ ์‹œ์ž‘์ ์—์„œ (๋„ˆ๋น„๊ฐ€) ๊ฐ€๊นŒ์šด ์ ๋“ค๋ถ€ํ„ฐ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์š”๋Š” ์‹œ์ž‘์ ์„ ํ(Queue)์— ๋„ฃ์€ ๋’ค์— ํ์— ์•„๋ฌด๋Ÿฐ ์š”์†Œ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ์ธ์ ‘ํ•œ ์ •์ ๋“ค์„ ํƒ์ƒ‰ํ•ด ๋‚˜์•„๊ฐ€๋ฉด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ ์ธ์ ‘ํ•œ ์ •์ ๋“ค์„ ๋ณด๋Š” ๊ณผ์ •์€, ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ์ €์žฅํ•˜๋ฉด O(V^2), ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•˜๋ฉด O(V+E)์ด ๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์ธ์ ‘ ํ–‰๋ ฌ : O(v^2)
  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)

ํ๋ฅผ ์ด์šฉํ•œ BFS์˜ ๊ตฌ์ฒด์ ์ธ ๋™์ž‘๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์‹œ์ž‘์ ์ธ 1์„ ํ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  2. 1์„ ๊บผ๋‚ด๊ณ  ์ธ์ ‘ํ•œ ์ •์ ์ธ 2,3,8์„ ํ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  3. ํ์— 2๋ฅผ ๊บผ๋‚ด๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ 7์„ ๊บผ๋‚ด์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
  4. ํ์—์„œ 3์„ ๊บผ๋‚ด๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ 4,5๋ฅผ ๊บผ๋‚ด์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
  5. ์œ„์™€ ๊ฐ™์ด ํ์—์„œ ๋” ์ด์ƒ ๊บผ๋‚ผ ๊ฒƒ์ด ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

 

โ“ ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰์„ ํ•  ๋•Œ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋„ ์•„๋‹Œ ๊ตณ์ด ํ(Queue) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

๋จผ์ € ํƒ์ƒ‰๋˜๋Š” ์œ„์น˜๋ฅผ ๋จผ์ € ๋นผ๋‚ด์„œ ์ธ์ ‘ํ•œ ์ ๋“ค์„ ๋ณธ๋‹ค๋Š” ์š”๊ตฌ ์‚ฌํ•ญ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง€์›ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๊ณ  ์ปดํŒฉํŠธํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ(Queue)์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

โ“ FIFO๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ deque๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

deque์—์„œ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” .append(N)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์›์†Œ๋ฅผ ๋บ„ ๋•Œ๋Š” .popleft(), ์›์†Œ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๊ณ ์ž ํ•  ๋•Œ๋Š” .reverse()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ์ธ๋ฑ์Šค์˜ ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ์œ„ํ•ด .pop๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์›์†Œ๋ฅผ ๊บผ๋‚ด๊ณ  ์œ„์น˜๋ฅผ ์กฐ์ •ํ•˜๋Š” O(k) ๋งŒํผ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋” ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— list๊ฐ€ ์•„๋‹Œ deque๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ถ ‘์ตœ๋‹จ๊ฑฐ๋ฆฌ’ ๋ฌธ์ œ์—์„œ ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰(BFS) ์‚ฌ์šฉํ•˜๊ธฐ

BFS๊ฐ€ ๋น›์„ ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•  ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ์‹œ์ž‘์ ์—์„œ ๋ชจ๋“  ์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด ํ•„์š”ํ•œ ์ตœ์†Œ ๊ฐ„์„ (Edge) ๊ฐœ์ˆ˜๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

BFS๋Š” ์‹œ์ž‘์ ์—์„œ ๊ฐ€๊นŒ์šด ์ ๋“ค๋ถ€ํ„ฐ ํƒ์ƒ‰์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฒดํฌํ•ด ๋‚˜์•„๊ฐ€๋ฉด ๊ทธ๋ž˜ํ”„์˜ ์ „์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฝ์šฐ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ O(V+E)์— ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.