๋ฐฑ์ค 2178
๐์ค๋์ ๊ณต๋ถ๐
โ ๋ฐฑ์ค 2178
๋ฌธ์
๋์ ํ์ด(ํ๋ฆผ)
์ด๋ฒ ๋ฌธ์ ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์๋ด๋ ๋ฌธ์ ์๋ค. ์ฐ์ ๊ธธ์ด ์๋๊ณณ์๋ ๋ชจ๋ 0์ ์ถ๊ฐํด์ ์ง์ ๋ ๊ธธ์ ๋ฒ์ด๋ ์ ์๋๋ก ํ์๊ณ , bfs๋ฅผ ํ์ฉํด ํ๋ ค๊ณ ํ์๋ค. ํ์ง๋ง ํ๋ค๋ณด๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด๋ฒ๋ ธ๊ณ ๋์ค์ ๋ค๋ฅธ ๊ธธ๋ก ๊ฐ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์์ ๋นผ๋ ค๊ณ ํ์ง๋ง ์ฝ์ง์์๋ค.
import sys
from collections import deque
n, m = map(int, sys.stdin.readline().split())
maze = []
for i in range(n + 2):
if i == 0:
maze.append([0] * (m + 2))
elif i == (n + 1):
maze.append([0] * (m + 2))
else:
maze.append([0] + list(map(int, sys.stdin.readline().strip())) + [0])
# ๋๋น ์ฐ์ ํ์
def bfs(x, y, n, m):
count = 0
queue = deque()
queue.append((y, x))
while queue:
if x == n and y == m:
return count
y, x = queue.popleft()
# ์ค๋ฅธ์ชฝ
if maze[y][x + 1] == 1:
count += 1
print("right", count)
queue.append((y, x + 1))
# ์๋ก
if maze[y + 1][x] == 1:
count += 1
print("down", count)
queue.append((y + 1, x))
# ์ผ์ชฝ
if maze[y][x - 1]:
count += 1
print("left", count)
queue.append((y, x - 1))
# ์๋๋ก
if maze[y - 1][x]:
count += 1
print("up", count)
queue.append((y - 1, x))
maze[y][x] = 0
return count
bfs(1, 1, n + 1, m + 1)
input
4 6
101111
101010
101011
111011
output
down 1
down 2
down 3
right 4
right 5
up 6
up 7
up 8
right 9
right 10
right 11
down 12
down 13
right 14
down 15
down 16
right 17
๐ฏํ๋ฃจ ํ๊ณ ๐ฏ
๋ฐฑ์ค 2178์ ํธ๋๊ณผ์ ์์ ํ๋ฒ ์๋ชป๋ ๊ธธ๋ก ๊ฐ๋ค๋ ๊ณ์ ๊ผฌ์ฌ์ ์ด์ํ๊ธธ๋ก ๊ฐ๋๊ฑฐ ๊ฐ๋ค. ๋ด์ผ ์ด๋ฌธ์ ๋ฅผ ๋ค์ ํ๋ฉด์ ๋ถ์ํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ์ผ๊ฒ ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ