๐๏ธ Algorithm/๐ฉ ๋ฐฑ์ค
๐ฉ [๋ฐฑ์ค] [Python] [Gold5] 14503๋ฒ_๋ก๋ด ์ฒญ์๊ธฐ
Dbswnstjd
2023. 2. 10. 20:04
๋ฌธ์
https://www.acmicpc.net/problem/14503
14503๋ฒ: ๋ก๋ด ์ฒญ์๊ธฐ
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฒญ์ํ๋ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์ฅ์๋ N×M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด
www.acmicpc.net
ํ์ด
# ๋ฐฑ์ค 14503๋ฒ ๋ฌธ์ - ๋ก๋ด ์ฒญ์๊ธฐ
import sys
from collections import deque
input = sys.stdin.readline
n,m = map(int,input().split())
visited = [[0] * m for _ in range(n)]
r,c,d = map(int,input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
# d => 0,3,2,1 ์์๋ก ๋์์ผํ๋ค.
dx = [-1,0,1,0]
dy = [0,1,0,-1]
# ์ฒ์ ์์ํ๋ ๊ณณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[r][c] = 1
cnt = 1
while 1:
flag = 0
# 4๋ฐฉํฅ ํ์ธ
for _ in range(4):
# 0,3,2,1 ์์ ๋ง๋ค์ด์ฃผ๊ธฐ์ํ ์
nx = r + dx[(d+3)%4]
ny = c + dy[(d+3)%4]
# ํ๋ฒ ๋์์ผ๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก ์์
์์
d = (d+3)%4
if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 0:
if visited[nx][ny] == 0:
visited[nx][ny] = 1
cnt += 1
r = nx
c = ny
#์ฒญ์ ํ ๋ฐฉํฅ์ด๋ผ๋ ํ์ผ๋ฉด ๋ค์์ผ๋ก ๋์ด๊ฐ
flag = 1
break
if flag == 0: # 4๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ๋์ด ์์ ๋,
if graph[r-dx[d]][c-dy[d]] == 1: #ํ์งํ๋๋ฐ ๋ฒฝ
print(cnt)
break
else:
r,c = r-dx[d],c-dy[d]
์๊ณ ๋ฆฌ์ฆ ๊ธฐ์ ๋ณด๋ค๋ ๋ฌธ์ ์ ๋์จ ๋ด์ฉ ๊ทธ๋๋ก ๊ทธ๋ฅ ๊ตฌํ์ ํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
๊ทผ๋ฐ ์ฒ์ ํ์ด๋ณด๋ ๋ฌธ์ ์ด๊ธฐ๋ ํ๊ณ ํ์ ํ๋ ๋ฐฉ๋ฒ์ด ํท๊ฐ๋ฆฌ๊ณ ๋ฌธ์ ์ ๋ํ ์ดํด๋ฅผ ํ๋๋ผ ์๊ฐ์ด ์กฐ๊ธ ์์๋๋ค.
๋ค์ ํ๋ฒ ํ์ด๋ณด๋๋ก ํด์ผ๊ฒ ๋ค.