ํ์ด
์๋ฎฌ๋ ์ด์ ์ ํตํ ๋ฑ๊ฒ์ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ์์ ์ฃผ์ด์ง ์ค์ํ ๊ตฌํ์ฌํญ์
-
์๊ฐ์ด ์ง๋ ๋๋ง๋ค ๋ฑ์ด ํ์นธ์ฉ ์์ง์ธ๋ค.
-
์ฌ๊ณผ๋ฅผ ๋จน์ ๊ฒฝ์ฐ ๋ฑ์ ๊ธธ์ด๊ฐ 1์นธ ์ฆ๊ฐํ๋ค.
-
์ฃผ์ด์ง ์๊ฐ๋ง๋ค ๋ฐฉํฅ์ ํ์ ํ๋ ๋ณ์๊ฐ ์๋ค.
๋ฑ๊ฒ์์ ์งํ ํ N x N ๋ณด๋๋ฅผ ์ค๋นํ๊ณ 0, 0 ์ ๋ฑ์ ์์น์ํจ๋ค.
๋ฑ์ default ๋ฐฉํฅ์ ์ฐ์ธก์ด๋ค.
์ฃผ์ด์ง ์ฌ๊ณผ ์ ๋ณด๋ฅผ ํตํด N x N ๋ณด๋์ ์ฌ๊ณผ๋ฅผ ๋ฐฐ์นํ๋ค.
์๊ฐ์ด ์ต๋ 10,000์ด๋ก ํ์ ๋์ด์์ผ๋ ์ฃผ์ด์ง ๋ฐฉํฅ์ ํ์๊ฐ์ ์ธ๋ฑ์ฑํ์ฌ ํ์ ๋ฐฉํฅ์ ์ ์ฅํ๋ค.
๊ฒ์์ด ์์๋๋ค.
์๊ฐ์ด ํ๋ฅด๊ณ ๋ฑ์ ์์น๊ฐ ๋ณ๊ฒฝ๋๋ค.
์ด๋ ์กฐ๊ฑด๋ฌธ์ ํตํด ๋ฑ์ด ๋ณด๋ ๋ฐ์ผ๋ก ๊ฐ๊ฑฐ๋ ์๊ธฐ์์ ์ ์ง๋๊ฒ ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ,
๋ฑ์ด ์ฌ๊ณผ๋ฅผ ๋จน์ง์๋ ๊ฒฝ์ฐ๋ง์ ์ฌ์ฉํด ๋ฑ์ ๊ผฌ๋ฆฌ๋ฅผ ์ ๊ฑฐํด์ฃผ๋ฉด๋๋ค.
๋ํ ๋ฐฉํฅ์ ํ์๊ฐ์ผ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ์ ์ธํด๋ direction ํจ์๋ฅผ ํตํด ๋ค์ ์ํ์์ ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฑ์ด ์ด๋ํ๊ฒ๋ ์กฐ๊ฑด๋ฌธ์ ์ ์ธํ๋ค.
๋ฑ์ด ๋ณด๋ ๋ฐ์ผ๋ก ๊ฐ๊ฑฐ๋ ์๊ธฐ์์ ์ ์ง๋๊ฒ ๋ ๊ฒฝ์ฐ while๋ฌธ์ ํ์ถํ๊ณ ๊ฒ์์์ ํ ํ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ค์ฝ๋
import sys
input = sys.stdin.readline
# 0 : empty
# 1 : apple
# 2 : snake
# ๋ฐฉํฅ์ ํ
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def direction(c, d):
if c == "L":
d = (d - 1) % 4
else:
d = (d + 1) % 4
return d
N = int(input())
K = int(input())
board = [[0] * N for _ in range(N)]
# ์ฌ๊ณผ ๋ฐฐ์น
for _ in range(K):
x, y = map(int, input().split())
board[x - 1][y - 1] = 1
L = int(input())
dirc = [0 for _ in range(10000)]
# ๋ฐฉํฅ์ ํ์๊ฐ
for i in range(L):
X, C = input().split()
dirc[int(X)] = C
t, x, y, d = 0, 0, 0, 0
board[x][y] = 2 # initial position
snake_len = [[x, y]] # ๋ฑ์ ๊ธธ์ด
while True:
t += 1
# ๋ค์ ๋ฑ๋จธ๋ฆฌ๊ฐ ์์น ํ ์ขํ
x = x + dx[d]
y = y + dy[d]
if 0 <= x < N and 0 <= y < N and board[x][y] != 2:
if board[x][y] == 0: # ๋ฑ์ด ์ฌ๊ณผ๋ฅผ ๋จน์ง์๋ ๊ฒฝ์ฐ
nx, ny = snake_len.pop(0) # ๊ผฌ๋ฆฌ ์ขํ ์ถ์ถ
board[nx][ny] = 0 # ๊ผฌ๋ฆฌ ์ ๊ฑฐ
board[x][y] = 2 # ๋ฑ ์ขํ ์์
snake_len.append([x, y]) # ๋ฑ ๊ธธ์ด ์์
if dirc[t] != 0: # ๋ฐฉํฅ์ ํ์๊ฐ์ผ ๊ฒฝ์ฐ
d = direction(dirc[t], d)
else:
print(t)
break