ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿšฉ BFS

 

thinking

์ตœ์†Œ ์นธ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ bfs๋กœ ํ•ด๊ฒฐํ•˜์ž๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

์ฝ”๋“œ

ํ’€์ด 1

visited๋ผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•

from collections import deque

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

def bfs():
    global visited
    q = deque()  # ํ ๋งŒ๋“ค๊ณ 
    q.append((0, 0))  # ์‹œ์ž‘์  ๋„ฃ์–ด์ฃผ๊ณ 
    visited[0][0] = 1  # ๊ฐ’ ๊ฐฑ์‹ 

    while q:  # ํ์— ๊ฐ’์ด ์žˆ์œผ๋ฉด
        x, y = q.popleft()  # ๋งจ ์™ผ์ชฝ ๊ฐ’ ๋นผ์„œ ํ• ๋‹นํ•˜๊ณ 
        for i in range(4):  # ์‚ฌ๋ฐฉ ํƒ์ƒ‰ํ•˜๋ฉด์„œ
            nx = x+dx[i]
            ny = y+dy[i]
            # ์ธ๋ฑ์Šค๊ฐ€ ๋ฒ”์œ„ ์ด๋‚ด์ด๋ฉด์„œ ๋ฏธ๋กœ์˜ ๊ฐ’์ด 1์ด๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
            if 0<=nx<N and 0<=ny<M and a[nx][ny] == 1 and not visited[nx][ny]:
                visited[nx][ny] = visited[x][y] + 1  # ๋ฐฉ๋ฌธ์ฒดํฌ(์ด์ „ ๊ฐ’์— 1์„ ๋”ํ•˜๋ฉด์„œ ๊ฐ’ ๊ฐฑ์‹ )
                q.append((nx, ny))  # ํ์— ๋„ฃ๋Š”๋‹ค



N, M = map(int, input().split())
a = [list(map(int, input())) for _ in range(N)]

visited = [[0 for _ in range(M)] for _ in range(N)]  # ๊ฐ’ ๊ฐฑ์‹ ํ•  2์ฐจ์›๋ฐฐ์—ด
bfs()

print("{}".format(visited[N-1][M-1]))
# visited ์ถœ๋ ฅ๊ฒฐ๊ณผ (testcase 1๋ฒˆ)

[
 [1, 0, 9, 10, 11, 12], 
 [2, 0, 8, 0, 12, 0], 
 [3, 0, 7, 0, 13, 14], 
 [4, 5, 6, 0, 14, 15]
]

 

ํ’€์ด 2

์• ์ดˆ์— ๋ฐ›์€ input 2์ฐจ์›๋ฐฐ์—ด(a) ์ž์ฒด๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ๋ฐฉ๋ฒ•์œผ๋กœ ํ• ๋•Œ๋Š” input ๋ฆฌ์ŠคํŠธ๋ฅผ intํ˜•์œผ๋กœ ๋ฐ›์œผ๋ฉด [0,0]์˜ ๊ฐ’์ด 1์ด ์•ˆ๋˜๊ณ  ๊ฐฑ์‹ ๋˜๊ธฐ ๋•Œ๋ฌธ์— strํ˜•์œผ๋กœ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

(์‚ฌ์‹ค input ๋ฆฌ์ŠคํŠธ๋ฅผ intํ˜•์œผ๋กœ ๋ฐ›์•˜์„ ๋•Œ๋ž‘ ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ’์€ ๋™์ผํ•˜๋‚˜ ๋” ์ •ํ™•ํ•œ ํ’€์ด๋ฅผ ์œ„ํ•ด strํ˜•์œผ๋กœ ํ’€์—ˆ๋‹ค)

from collections import deque

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

def bfs():
    q = deque()
    q.append((0, 0))
    a[0][0] = 1  # ์‹œ์ž‘์ ์˜ ๊ฐ’์„ intํ˜•์œผ๋กœ ๊ฐฑ์‹ ํ•˜๊ณ  ์‹œ์ž‘

    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]
            if 0<=nx<N and 0<=ny<M and a[nx][ny] == '1':  # ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ๊ตณ์ด ์•ˆํ•ด๋„ ๋œ๋‹ค.
                a[nx][ny] = a[x][y] + 1
                q.append((nx, ny))



N, M = map(int, input().split())
a = [list(input()) for _ in range(N)]  # strํ˜•์œผ๋กœ ๋ฐ›์Œ
bfs()

print("{}".format(a[N-1][M-1]))
# a ์ถœ๋ ฅ๊ฒฐ๊ณผ (testcase 1๋ฒˆ)

[
 [1, '0', 9, 10, 11, 12], 
 [2, '0', 8, '0', 12, '0'], 
 [3, '0', 7, '0', 13, 14], 
 [4, 5, 6, '0', 14, 15]
]


# a๋ฅผ intํ˜•์œผ๋กœ ๋ฐ›์•˜์„ ๋•Œ ์ถœ๋ ฅ๊ฒฐ๊ณผ
[
 [3, 0, 9, 10, 11, 12], 
 [2, 0, 8, 0, 12, 0], 
 [3, 0, 7, 0, 13, 14], 
 [4, 5, 6, 0, 14, 15]
]

 

ํ•œ์ค„ํ‰

BFS๋กœ ํ’€์ž๋ฉด์„œ ์ฒจ์— ์•„๋ฌด์ƒ๊ฐ์—†์ด DFS ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค ์–ด์ด์—†๋‹ค

bfs๋ณด๋‹ค dfs๋ฅผ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์ด ํ’€์–ด์„œ ๊ทธ๋Ÿฐ๊ฑฐ ๊ฐ™๋‹ค

bfs๋ฅผ ์ข€ ๋” ๋งŽ์ด ํ’€์–ด์•ผ๊ฒ ๋‹ค

 

๋Œ“๊ธ€