
Review
์๊ณ ๋ฐ๋ ๋ฐฉํฅ๊ณผ ํ์ง์ ์๊ฐํด ๋ด๋๋ฐ ๊ฝค ์ค๋ ๊ฑธ๋ ธ๋ค ..
๋ฐฉํฅ์ด ์๊ธฐ์ bfs๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ๊น์ง๊ฐ ๋ด ์ค๋ ฅ์ด์๋จ ๊ฑธ ๋ค์ ํ๋ฒ ๋๊ผ๋ค.
โจ HOW? ์๊ณ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก turn
(d + 3 ) % 4
โจ HOW? ํ์ง
nx = x - dx[d]
ny = y - dy[d]
Code
'''
๋ฐฉ n*m, ๋ฒฝ ๋๋ ๋น์นธ, ์ฒญ์๊ธฐ๋ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด ์์
$0$์ธ ๊ฒฝ์ฐ ๋ถ์ชฝ,
$1$์ธ ๊ฒฝ์ฐ ๋์ชฝ,
$2$์ธ ๊ฒฝ์ฐ ๋จ์ชฝ,
$3$์ธ ๊ฒฝ์ฐ ์์ชฝ์ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๊ฒ์ด๋ค.
1. ํ์ฌ ์นธ์ด ์์ง ์ฒญ์๋์ง ์์ ๊ฒฝ์ฐ, ํ์ฌ ์นธ์ ์ฒญ์ํ๋ค.
2. ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ,
1. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ํ์งํ ์ ์๋ค๋ฉด ํ ์นธ ํ์งํ๊ณ 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
2. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๋ค์ชฝ ์นธ์ด ๋ฒฝ์ด๋ผ ํ์งํ ์ ์๋ค๋ฉด ์๋์ ๋ฉ์ถ๋ค.
3. ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ,
1. ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ํ๋ค.
2. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์์ชฝ ์นธ์ด ์ฒญ์๋์ง ์์ ๋น ์นธ์ธ ๊ฒฝ์ฐ ํ ์นธ ์ ์งํ๋ค.
3. 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
'''
from collections import deque
n, m = map(int, input().split())
r, c, d = map(int, input().split())
graph = []
for _ in range(n):
graph.append(list(map(int, input().split())))
visited = [[False] * m for _ in range(n)]
visited[r][c] = 1
cnt = 1
'''์๊ณ ๋ฐฉํฅ'''
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
queue = deque()
queue.append((r,c))
while queue:
flag = False
x, y = queue.popleft()
for _ in range(4):
d = ( d + 3 ) % 4
nx = x + dx[d]
ny = y + dy[d]
if 0 <= nx < n and 0 <= ny < m:
if graph[nx][ny] == 0:
if not visited[nx][ny]:
visited[nx][ny] = True
cnt += 1
queue.append((nx, ny))
flag = True
break
if not flag:
nx = x - dx[d]
ny = y - dy[d]
if graph[nx][ny] == 1:
print(cnt)
break
else:
queue.append((nx, ny))
์๊ฐ๋ณต์ก๋
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ ์ฃผ์ด์ง ๋งต์ ํฌ๊ธฐ์ ๋น๋กํฉ๋๋ค.
๋งต์ ํฌ๊ธฐ๊ฐ NรM์ผ ๋, ๋ชจ๋ ์นธ์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํด์ผ ํ๋ฏ๋ก
์ต์
์ ๊ฒฝ์ฐ O(NรM)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.