๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/3190
์ฌ๊ณผ๊ฐ ์์ ๋๋ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋จธ๋ฆฌ๋ฅผ ํ ์นธ ์์ ์์นํ ๋ค, ๊ผฌ๋ฆฌ๊ฐ ์๋ ์นธ์ ๋น์ด๋ค.
๋ง์ฝ ์ ์ํฉ์์ (1, 2)์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด 1๋ฒ๊ณผ 2๋ฒ์ ๊ณผ์ ๋ง ์ํ๋๋ค. (๊ผฌ๋ฆฌ๊ฐ ์๋ ์นธ์ ๋น์ฐ์ง X)
๋ฑ(deque)
๋ฅผ ์ฌ์ฉimport sys
from collections import deque
input = sys.stdin.readline
n = int(input()) # ๋ณด๋์ ํฌ๊ธฐ
k = int(input()) # ์ฌ๊ณผ์ ๊ฐ์
apples = []
for _ in range(k):
x, y = map(int, input().split())
apples.append((x, y)) # ํํ ํํ๋ก ๋ฐฐ์ด์ ์ ์ฅ
l = int(input()) # ๋ฐฉํฅ ๋ณํ
move_sec = [] # ๋ช ์ด์ ํ๋์ง?
move_dir = [] # ๋ฐฉํฅ (L or D)
for _ in range(l):
s, d = input().split()
s = int(s)
move_sec.append(s)
move_dir.append(d)
d = deque() # ์๋ฃ๊ตฌ์กฐ ๋ฑ์ ํ์ฉ
cnt = 0 # ์๊ฐ
direction = [(0, 1), (1, 0), (0, -1), (-1, 0)] # ๋ฐฉํฅ
# ์ด๊ธฐ ์ขํ๋ฅผ ๋ฑ์ ๋ฃ๊ณ ์์, ๋ฐฉํฅ๋ ์ด๊ธฐํ
cur = (1, 1)
dir_idx = 0
dir = direction[dir_idx]
d.append(cur)
while(True):
cnt += 1
x, y = cur[0], cur[1]
dir_x, dir_y = dir[0], dir[1]
next = (x + dir_x, y + dir_y) # ๋ฑ์ ๋จธ๋ฆฌ๊ฐ ์์นํ ์ขํ
# ๋ฒฝ์ ๋ถ๋ชํ๊ฑฐ๋ ์์ ์ ๋ชธ์ ๋ถ๋ชํ
if next[0] > n or next[0] < 1 or next[1] > n or next[1] < 1 or next in d:
break
# ๊ณ์ ์งํ
d.append(next) # ์ค๋ฅธ์ชฝ์ ์ฝ์
, pop์ ์ผ์ชฝ์์ ํด์ผํจ
if next not in apples: # ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด
d.popleft()
else:
apples.remove(next)
cur = next
# ๋ฐฉํฅ ์ ํ
if cnt in move_sec:
idx = move_sec.index(cnt)
move = move_dir[idx]
if move == 'D':
dir_idx = (dir_idx + 1) % 4
dir = direction[dir_idx]
else: # move == 'L'
dir_idx = (dir_idx - 1) % 4
dir = direction[dir_idx]
print(cnt)
์ฒ์์ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ๊ณผ๋ฅผ ์์ ๋ ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์์๋ค.
if next not in apples: # ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด
d.popleft()
else:
apples.remove(next)
์ฒ์ ํ ๋๋ else ๋ฌธ์ ์์ฑํ์ง ์์์๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ๋ฑ์ด ๋ฐฉํฅ ์ ํ์ ํ๋ฉฐ ์ฌ๊ณผ๊ฐ ์์๋ ์ขํ๋ฅผ ์ฌ๋ฐฉ๋ฌธํ ์ ์๋๋ฐ, ๊ทธ๋ ๊ฒ ๋๋ฉด ๋ชธ์ ๊ธธ์ด๊ฐ ๋ ํ ๋ฒ ๋ ๊ธธ์ด์ง๋ค.
๊ตฟ ^ใ ^ bb
%
๋๋จธ์ง ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๋ ๊น๋ํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.