DFS, BFS

์ƒˆ๋ฒฝํ•˜๋Š˜ยท2021๋…„ 4์›” 27์ผ
0

๋ฌธ๋ฒ• ์ •๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
2/3

์™œ DFS์™€ BFS๋ฅผ ๋ฐฐ์›Œ์•ผ ํ• ๊นŒ?

๐Ÿค” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด
ex. ์•ŒํŒŒ๊ณ 

๋‘˜์˜ ์ฐจ์ด๋Š” ๋ญ˜๊นŒ?

  • ๋๊นŒ์ง€ ํŒŒ๊ณ  ๋“œ๋Š” ๊ฒƒ
    : ๊ทธ๋ž˜ํ”„์˜ ์ตœ๋Œ€ ๊นŠ์ด ๋งŒํผ์˜ ๊ณต๊ฐ„์„ ์š”๊ตฌ
    ๐Ÿ‘๐Ÿป ๊ณต๊ฐ„์„ ์ ๊ฒŒ ์”€.
    ๐Ÿ‘Ž๐Ÿป ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š์Œ

BFS

  • ๊ฐˆ๋ผ์ง„ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด๋ณด๊ณ  ์˜ค๋Š” ๊ฒƒ
    ๐Ÿ‘๐Ÿป ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ - ๋ชจ๋“  ๋ถ„๊ธฐ ์ˆ˜๋ฅผ ๋‹ค ๋ณด๊ณ  ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ !
    ๐Ÿ‘Ž๐Ÿป ๋ชจ๋“  ๋ถ„๊ธฐ ์ˆ˜๋ฅผ ๋‹ค ๋ด์•ผํ•ด์„œ ๊ณต๊ฐ„ ๋งŽ์ด ์”€, ์‹œ๊ฐ„ ๋” ์˜ค๋ž˜๊ฑธ๋ฆด ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ.

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

  1. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.
  2. ํ˜„์žฌ ์Šคํƒ์˜ ๋…ธ๋“œ๋ฅผ ๋นผ์„œ visited์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  3. ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  4. 2๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•œ๋‹ค.
  5. ์Šคํƒ์ด ๋น„๋ฉด ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๋ฐฉ๋ฌธ ์—ฌ๋ถ€?
    + visited ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์„œ ๊ธฐ๋ก!
  • ํ˜„์žฌ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ•ด์•ผํ•จ
  1. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
  2. ํ˜„์žฌ ํ์˜ ๋…ธ๋“œ๋ฅผ ๋นผ์„œ visited์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  3. ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  4. 2๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•œ๋‹ค.
  5. ํ๊ฐ€ ๋น„๋ฉด ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค.

๐Ÿ’ป ํ’€๋‹ค๋ณด๋‹ˆ ๋‚˜์˜จ ์ฃผ์š” ์ฝ”๋“œ๋“ค

def bfs(x, y):
    directions = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, -1), (-1, 1)]

    que = deque()
    que.append((x, y))

    island[x][y] = 0

    while que:
        n = que.popleft()

        for i in range(8):
            nx = n[0] + directions[i][0]
            ny = n[1] + directions[i][1]

            if (0<=nx<h) and (0<=ny<w):
                if int(island[nx][ny]) == 1:
                    island[nx][ny] = 0
                    que.append((nx, ny))
def dfs(x, y):
    # ํ˜„์žฌ ์ƒ‰์ƒ(์ขŒํ‘œ) ๋ฐฉ๋ฌธ
    visited[x][y] = True
    cur_color = matrix[x][y]

    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if (0<=nx<N) and (0<=ny<N):
            # ํ˜„์žฌ ์ขŒํ‘œ์˜ ์ƒ‰์ƒ๊ณผ ์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ์— ์žˆ๋Š” ์ƒ‰์ƒ์ด ๊ฐ™์œผ๋ฉด dfs๋กœ ์ถ”๊ฐ€
            if visited[nx][ny] == False:
                if matrix[nx][ny] == cur_color:
                    dfs(nx, ny)
profile
๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฑฐ ๋‹ค ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ทธ๋‚ ๊นŒ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€