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

๐Ÿฅด์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก 

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ] DFS, BFS (2)

1ํŽธ์€ ์•„๋ž˜ ๋งํฌ๋กœ!

https://jyoonit.tistory.com/28

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ] DFS, BFS (1)

๐ŸŒ€ ๊ทธ๋ž˜ํ”„ ๐ŸŒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ทธ๋ž˜ํ”„๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ. 1. ์ธ์ ‘ํ–‰๋ ฌ : 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ 2. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ #์ธ์ ‘ํ–‰๋ ฌ ๋ฐฉ์‹ INF = 999999999 graph = [ [0

jyoonit.tistory.com

 

โœ…์˜ˆ์ œ : ์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค๋จน๊ธฐ

n * m ํฌ๊ธฐ์˜ ์–ผ์Œํ‹€. 0์€ ๊ตฌ๋ช…์ด ๋šซ๋ ค์žˆ๋Š” ๋ถ€๋ถ„, 1์€ ์นธ๋ง‰์ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„. ๊ตฌ๋ฉ์ด ๋šซ๋ ค์žˆ๋Š” ๋ถ€๋ถ„๋ผ๋ฆฌ ์ƒํ•˜์ขŒ์šฐ๋กœ ๋ถ™์–ด์žˆ์œผ๋ฉด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ„์ฃผ. ์–ผ์Œ ํ‹€์˜ ๋ชจ์–‘์ด ์ฃผ์–ด์งˆ ๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” ์–ผ์Œ์˜ ๊ฐœ์ˆ˜?

 

๐Ÿ’ก๋‚ด ํ’€์ด

n, m = map(int, input().split())
icetray = list()
for i in range(n):
    icetray.append(list(map(int, input())))

ice = 0

def dfs(x, y):
    if x < 0 or x >= n or y < 0 or y >= m :
        return
    if icetray[x][y] == 0 :
        icetray[x][y] = 1
        dfs(x - 1, y)
        dfs(x + 1, y)
        dfs(x, y + 1)
        dfs(x, y - 1)
        return

for x in range(n):
    for y in range(m):
        if icetray[x][y] == 0 :
            dfs(x, y)
            ice += 1
print(ice)

 

โœ…์˜ˆ์ œ : ๋ฏธ๋กœ ํƒˆ์ถœ

n * m ํฌ๊ธฐ์˜ ์งํ•˜๊ฐํ˜• ํ˜•ํƒœ์˜ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜€์žˆ๋‹ค. ๋ฏธ๋กœ์—๋Š” ์—ฌ๋Ÿฌ ๋งˆ๋ฆฌ์˜ ๊ดด๋ฌผ์ด ์žˆ์–ด ํ”ผํ•ด์„œ ํƒˆ์ถœํ•ด์•ผํ•จ. ํ˜„์žฌ์œ„์น˜๋Š” (1, 1)์ด๊ณ  ๋ฏธ๋กœ์˜ ์ถœ๊ตฌ๋Š” (n, m)์˜ ์œ„์น˜์— ์กด์žฌ. ๊ดด๋ฌผ์ด ์žˆ๋Š” ๋ถ€๋ถ„์€ 0 ๊ดด๋ฌผ์ด ์—†๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ๋ฏธ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ ํƒˆ์ถœ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ œ์‹œ๋จ. ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค. (์‹œ์ž‘์นธ๊ณผ ๋งˆ์ง€๋ง‰ ์นธ์„ ํฌํ•จํ•จ)

from collections import deque

n, m = map(int, input().split())
maze = []
for i in range(n):
    maze.append(list(map(int, input())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def bfs(x, y):
    queue = deque()
    queue.append((x, y))
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x +dx[i]
            ny = y +dy[i]
            if nx < 0 or ny < 0 or nx >= n or ny >= m :
                continue
            if maze[nx][ny] == 0:
                continue
            if maze[nx][ny] == 1:
                maze[nx][ny] = maze[x][y] + 1
                queue.append((nx, ny))
    return maze[n - 1][m - 1]

print(bfs(0, 0))

๋‹ต์•ˆ์˜ˆ์‹œ์™€ ๊ฐ™์€ ์ฝ”๋“œ...!! ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋”ฐ๋ผ์ณค๋‹น....ใ…Ž-ใ…Ž ๋‹ค์‹œ ์ฒœ์ฒœํžˆ ๋ณด๋ฉด์„œ ์ดํ•ดํ•ด๋ด์•ผ๊ฒ ๋‹ค

์•Œ๊ณ ๋ฆฌ์ฆ˜์–ด์นด๋ƒ....์ฝ”ํ…Œ์–ด์ฉœ์ข‹์•„...^^/