์ฝํ
์ค๋น
<dfs, bfs> ๋ฐฑ์ค 14503๋ฒ. ๋ก๋ด ์ฒญ์๊ธฐ (๊ณจ๋ 5)
์๋๋ค
2023. 1. 6. 04:33
https://www.acmicpc.net/problem/14503
14503๋ฒ: ๋ก๋ด ์ฒญ์๊ธฐ
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฒญ์ํ๋ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์ฅ์๋ N×M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด
www.acmicpc.net
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split()) #์ธ๋ก, ๊ฐ๋ก
r, c, d = map(int, input().split()) #์์ ์ขํ, ๋ฐฉํฅ
# 0:๋ถ, 1:๋, 2:๋จ, 3:์
lst = []
visited = [[0] * m for _ in range(n)]
dx = [-1,0,1,0]
dy = [0,1,0,-1] #๋ถ, ๋, ๋จ, ์
for _ in range(n):
lst.append(list(map(int, input().split())))
#step 1
visited[r][c] = 1 # ์์ ์ง์ -> ์ฒญ์ ์๋ฃ
cnt = 1
while 1:
wall = [1,1,1,1] # ๋ค ๋ฑกํฅ ๋ชจ๋ ์ฒญ์ or ๋ฒฝ์ธ ๊ฒฝ์ฐ๋ฅผ ์ํจ
#step 2
for i in range(4): #๋ชจ๋ ๋ฐฉํฅ์ ํ์ ํ๊ธฐ ์ํจ
# print(*lst, sep='\n')
d = (d+3)%4 # ์ผ์ชฝ์ผ๋ก ํ์
nx,ny = r + dx[d], c + dy[d] # ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ ์ง
if 0 <= nx < n and 0 <= ny < m and lst[nx][ny] == 0: #step2-2:ํ์ ํ ๋ฐฉํฅ์ผ๋ก 1์นธ ์ ์งํ์ ๋, ์ฒญ์๊ฐ ํ์ํ๋ค๋ฉด
if visited[nx][ny] == 0: #๋ฐฉ๋ฌธํ์ง ์์ ์ฅ์๋ฉด
visited[nx][ny] = 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
r, c = nx, ny
cnt += 1 # ์ฒญ์+1
wall[i] = 0
break
#step 2-4
if sum(wall)==4 : #๋ค ๋ฐฉํฅ ๋ชจ๋ ๋งํ ์๋ ๊ฒฝ์ฐ
if lst[r-dx[d]][c-dy[d]] == 0: #ํ์ง์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
r,c = r-dx[d], c-dy[d] #ํ์ง
else : # ํ์ง๋ ๋ชปํ๋ฉด
break #์๋๋ฉ์ถค
print(cnt)