ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 03/17(Wed) DFS์™€ BFS (1)
    HangHae99/TIL-hanghae99 2021. 3. 18. 00:11

    โœ๐Ÿผ

    DFS ์™€ BFS ๊ทธ๋ฆฌ๊ณ  ์žฌ๊ท€ํ•จ์ˆ˜.

    ๊ฐœ๋…๊ณผ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ด ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด ๊ฐ”๋”๋‹ˆ, ์‚ฐ์„ ๋งŒ๋‚ฌ๋‹ค.

    ๋‚œ์ด๋„๊ฐ€ ์ค‘์ธ ๋ฌธ์ œ 3๊ฐœ๊ฐ€ ๋‚จ์•˜๋Š”๋ฐ, ์ „๋ถ€ ํ’€ ์ˆ˜ ์—†์—ˆ๋‹ค. DFS, BFS, ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๊ฒ ๋Š”๊ฐ€.

     

    ์ด์ œ ์–ด์ฉ” ์ˆ˜ ์—†์œผ๋‹ˆ DFS์™€ BFS๋ฅผ ์•Œ์•„๋ณด์ž.


    1. DFS (Depth First Search, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

     

    ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์˜ ์˜ˆ์‹œ

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

    -์œ„ํ‚ค๋ฐฑ๊ณผ

     

     

    ์•„์ง ์ดˆ๋ณด๋ผ ๊ฐœ๋…๋งŒ ์ฝ์–ด์„  ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๊ณ , ์œ„์˜ ๊ทธ๋ฆผ์„ ๋ณด๋Š” ํŽธ์ด ๋” ๋‚ซ๋‹ค.

    1๋ฒˆ๋ถ€ํ„ฐ 10๋ฒˆ๊นŒ์ง€ ์ €๋Ÿฐ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰์„ ํ•œ๋‹ค. ๋” ์ด์ƒ ์—ฐ๊ฒฐ๋œ ๋ฒˆํ˜ธ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ์ญ‰ ํŒŒ๊ณ  ๋‚ด๋ ค๊ฐ„๋‹ค.

    ๊ตฌ๊ธ€๋งํ•˜๋‹ค๊ฐ€ ์–ด๋–ค ๋ธ”๋กœ๊ทธ์—์„œ DFS๋Š” ์ด์–ด๋‹ฌ๋ฆฌ๊ธฐ ๋ฐ”ํ†คํ„ฐ์น˜์™€ ๋น„์Šทํ•˜๋‹ค๋Š” ๊ธ€์„ ๋ณด๊ณ  ๋‚œ ๋’ค๋กœ DFS์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์™„๋ฒฝํžˆ ๋๋‹ค.

    ํ•˜์ง€๋งŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒŒ ์–ด๋ ค์›Œ์„œ ๊ฐœ๋… ์ดํ•ด๋งŒ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”์—ˆ๋Š”๋ฐ, ๋” ์ด์ƒ ํ”ผํ•  ์ˆ˜ ์—†์–ด์„œ ์˜ค๋Š˜์€ DFS, BFS๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฑธ ๋ชฉํ‘œ๋กœ ์‚ผ์•˜๋‹ค.

     

     


    ๋ฐฑ์ค€ 1260๋ฒˆ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด์„œ DFS์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

     

    ์˜ˆ์ œ ์ž…๋ ฅ 2๋ฅผ ๋“ค๊ณ  ์™”๋‹ค.

     

    5 5 3

    5 4

    5 2

    1 2

    3 4

    3 1

     

    ์ฒซ์งธ ์ค„์— ๋‚˜์™€์žˆ๋Š” 5 5 3์€ ์ˆœ์„œ๋Œ€๋กœ 'n = ์ •์ ์˜ ๊ฐœ์ˆ˜, m = ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜, v = ์ •์ ์˜ ๋ฒˆํ˜ธ' ๋ผ๊ณ  ํ•œ๋‹ค.

    ์ด๊ฑด ๋‚˜์ค‘์— ์ฝ”๋“œ ์น  ๋•Œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋กœ ํ•˜๊ณ , ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„ ๊นŒ์ง€ ๋‚˜์™€์žˆ๋Š” ์ˆซ์ž๋“ค์€ ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๋ผ๋Š”๋ฐ,

    ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๋„ ๋ชปํ–ˆ์—ˆ๋‹ค.

     

    ๋ง๋กœ ํ’€์–ด์„œ ์„ค๋ช…ํ•˜์ž๋ฉด,

     

    ์ˆซ์ž 5๋Š” 4์™€ ์—ฐ๊ฒฐ๋ผ์žˆ๊ณ ,

    ์ˆซ์ž 5๋Š” 2์™€ ์—ฐ๊ฒฐ,

    ์ˆซ์ž 1์€ 2์™€ ์—ฐ๊ฒฐ,

    ์ˆซ์ž 3์€ 4์™€ ์—ฐ๊ฒฐ,

    ์ˆซ์ž 3์€ 1๊ณผ ์—ฐ๊ฒฐ ๋ผ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

     

    ์˜์‹์˜ ํ๋ฆ„๋Œ€๋กœ ๊ทธ๋ ธ๋”๋‹ˆ ์ด์ƒํ•œ ๋ชจ์–‘์ด ๋ผ์„œ ๊ณ ์ณค๋‹ค.

     

    # ์ž‘์€ ์ˆซ์ž๊ฐ€ ์™ผ์ชฝ์— ์˜ค๋„๋ก ์ˆ˜์ •ํ•œ ์ด์œ ๋Š” ์–˜๋„ค๋ฅผ for๋ฌธ ๋Œ๋ ค์„œ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์„ ๊ฑฐ๋ผ ๊ฒฐ๊ตญ์—” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ฆฌ ๋˜๊ฒŒ ๋œ๋‹ค.

     

    1) ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ •๋ฆฌํ•˜์ž

     

    1: [2, 3]

    2: [1, 5]

    3: [1, 4]

    4: [3, 5]

    5: [2, 4]

     

    ์ˆซ์ž๋“ค์ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ ๋ผ์žˆ๋Š”์ง€ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ •๋ฆฌํ•ด๋†“๊ณ , ๊ณง ๋งŒ๋“ค ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์ด ๋†“๊ณ  ๋ณด๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ํ•œ๋‹ค.

    tool = [[0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0]]

    ์ด๋ ‡๊ฒŒ 6 X 6์œผ๋กœ ๋œ list๋ฅผ ๋งŒ๋“ ๋‹ค. tool์˜ index == ์ˆซ์ž๋ž‘ ๋งž์ถ”๊ธฐ ์œ„ํ•ด 5 X 5๊ฐ€ ์•„๋‹ˆ๋ผ 6 X 6์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

    ์ด์ œ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ •๋ฆฌํ•ด ๋†“์€ ๊ฑธ ๋ณด๋ฉด์„œ tool์— ์ฒดํฌ๋ฅผ ํ•ด๋ณด์ž.

     

    1์€ 2์™€ 3์ด๋ž‘ ๋งŒ๋‚˜๋‹ˆ๊นŒ 1์—ด [2]์™€ [3] ์ž๋ฆฌ์— 1๋กœ ๋ฐ”๊พผ๋‹ค.

    == 1์ด 2์™€ 3์ด๋ž‘ ๋งŒ๋‚œ๋‹ค๋Š” ๊ฑด 2๋„ 1๊ณผ ๋งŒ๋‚˜๊ณ , 3๋„ 1๊ณผ ๋งŒ๋‚œ ๋‹ค๋Š” ๋œป์ด๋‹ˆ๊นŒ, ์–˜๋„ค๋„ 1๋กœ ๋ฐ”๊พผ๋‹ค.

     

    2๋Š” 1๊ณผ 5๋ฅผ ๋งŒ๋‚˜๋‹ˆ๊นŒ 2์—ด [1]์™€ [5] ์ž๋ฆฌ์— 1๋กœ ๋ฐ”๊พผ๋‹ค. ( ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฒดํฌ)

    ์ด๋ ‡๊ฒŒ ๋งˆ์ง€๋ง‰ ์ˆซ์ž 5๊นŒ์ง€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ์ˆซ์ž๋“ค์„ 1๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

     

    tool = [[0, 0, 0, 0, 0, 0],
            [0, 0, 1, 1, 0, 0],
            [0, 1, 0, 0, 0, 1],
            [0, 1, 0, 0, 1, 0],
            [0, 0, 0, 1, 0, 1],
            [0, 0, 1, 0, 1, 0]]

    1๋กœ ๋‹ค ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋‚˜๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜์˜จ๋‹ค.

     

    DFS๋“  BFS๋“  ์—ฌ๊ธฐ๊นŒ์ง€ ์ดํ•ดํ–ˆ์œผ๋ฉด ๋ฐ˜์€ ์˜จ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. DFS์™€ BFS ๊ฐœ๋… ์ดํ•ด๋Š” ํ•˜๊ฒ ๋Š”๋ฐ, ์ด๊ฑธ ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ์งœ์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋ณ„ ๋ฐฉ๋ฒ•์„ ๋‹ค ์จ๊ฐ€๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งฐ์—ˆ๋Š”๋ฐ, ์ „๋ถ€ ํ•˜๋‹ค๊ฐ€ ๋ง‰ํ˜”๋‹ค.

     

    ๊ฐ ์ˆซ์ž๋“ค์ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ ๋ผ์žˆ๋Š”์ง€๋Š” ์•Œ๊ฒ ๋Š”๋ฐ, ๊ทธ๋ž˜์„œ ์ด๊ฑธ ์–ด๋””๋‹ค๊ฐ€ ์ €์žฅ์„ ํ•ด๋†“์•„์•ผ ํ•˜๋ฉฐ, ์–ด๋–ป๊ฒŒ ์ €์žฅ์„ ํ•ด๋†“์•„์•ผ ํ•˜๋Š”์ง€ ๋ชฐ๋ž๋‹ค.

     

    ์˜ค๋Š˜ ๋‹ค๋ฅธ ํŒ€์›๋ถ„์ด DFS, BFS๋ฅผ ์ €๋ ‡๊ฒŒ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด๊ฐ€๋ฉด์„œ ์„ค๋ช…์„ ํ•ด์ฃผ์…จ๋Š”๋ฐ, ์ € ๋ฆฌ์ŠคํŠธ ๋ณด์ž๋งˆ์ž "์•„, ์ €๊ฑฐ๋‹ค. ์ €๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค" ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

     

    # ์ž…๋ ฅ ๋ฐ›์•„์•ผ ํ•  ๊ฐ’๋“ค
    n, m, start_node = map(int, input().split())
    
    # ์—ฐ๊ฒฐ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด ๋†“์„ ๋ฆฌ์ŠคํŠธ ์ค€๋น„(0๋ถ€ํ„ฐ ๋„ฃ์–ด์„œ ์ขŒํ‘œ์ฒ˜๋Ÿผ ํ™œ์šฉ)
    tool = [[0 for _ in range(n+1)] for _ in range(n+1)]
    
    # ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›๊ณ , ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“  ํ›„ -> ์—ฐ๊ฒฐ๋œ ๋ฒˆํ˜ธ๋“ค์„ ์ขŒํ‘œ๋กœ ๋„ฃ์–ด์„œ 1๋กœ ์ฒดํฌ ํ•ด๋†“์ž.
    for _ in range(m):
        x, y = map(int, input().split())
        tool[x][y] = tool[y][x] = 1

     ์—ฌ๊ธฐ๊นŒ์ง€์˜ ์ฝ”๋“œ.

     

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

    ๋‚˜๋จธ์ง€๋Š” ๋‚ด์ผ ์ •๋ฆฌํ•ด์•ผ์ง€.

     

     

     

    # update

     

    2021.03.18 - [HangHae99/TIL-hanghae99] - 03/18(Thu) DFS์™€ BFS (2)

     

    03/18(Thu) DFS์™€ BFS (2)

    ! ๊ฐœ์ธ ๊ธฐ๋ก์šฉ์œผ๋กœ TIL์„ ์ž‘์„ฑํ•˜๋ฉฐ ํ•œ ๋ฒˆ ๋” ์ •๋ฆฌํ•ด๋ณด๋Š” ๊ฒƒ์ด๋ผ ์ฝ”๋“œ๊ฐ€ ์™„๋ฒฝํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •๋ฆฌ๊ฐ€ ๋ฏธํกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2021.03.18 - [HangHae99/TIL-hanghae99] - 03/17(Wed) DFS์™€ BFS (1) 03/17(Wed) DFS์™€ BFS (..

    kelly-tech.tistory.com

     

     

     

    ๋Œ“๊ธ€