๐ ๋ฌธ์ ํ์ํ๊ธฐ
์ ์ฌ๊ฐํ ์์ญ S์ ํ๋ณ์ ๊ธธ์ด M (1 ≤ M ≤ 1,000)
์ ์ฌ๊ฐํ ์์ญ S ์, ์ผ์ชฝ ํ๋จ (0,0)์ ๋ก๋ด์ด ๋์ชฝ ๋ฐฉํฅ์ผ๋ก ์์น, ์ค๋ฅธ์ชฝ ์ ๊ผญ์ง์ (M,M)
๋ช ๋ น์ด n๊ฐ(1 ≤ n ≤ 1,000)
โ TURN dir (dir = 0์ด๋ฉด ํ์ฌ ์์น์์ ์ผ์ชฝ์ผ๋ก 90๋ ํ์ , dir = 1์ด๋ฉด ํ์ฌ ์์น์์ ์ค๋ฅธ์ชฝ์ผ๋ก 90๋ ํ์ )
โ MOVE d (d๋ 1,000 ์ดํ์ ์์ ์ ์)
๋ช ๋ น์ ์ํ ํ ๋ก๋ด์ด S์ ๋ฐ๊นฅ์ผ๋ก ๋๊ฐ๊ฒ ๋๋ฉด ํด๋น ๋ช ๋ น์ด ์ด์ ์ ํจํ์ง ์์
๋ช ๋ น์ด ์ด์ด ์ ํจํ์ง ์๋ค๋ฉด -1 ์ถ๋ ฅ
๋ช ๋ น์ด ์ด์ด ์ ํจํ๋ค๋ฉด ๋ช ๋ น์ด ์ํ ํ ๋ก๋ด์ ์ต์ข ์์น x์ขํ y์ขํ ์ถ๋ ฅ
์๋์ ๊ทธ๋ฆผ์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ๋ ์ด์ฐจ์ ๋ฆฌ์คํธ์ ๋ฐฉํฅ๊ณผ ๋ฐ๋๋ก ์ขํ๊ฐ ์ค์ ๋์๋ค๋ ์ ์ ์ ์ธํ๋ฉด ํฐ ํน์ด์ฌํญ์ด ์๋ ๊ตฌํ ๋ฌธ์ ์ด๋ค.
๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
1. ์ ์ฌ๊ฐํ S ํ๋ณ์ ๊ธธ์ด(M)์ ๋ช ๋ น์ด ๊ฐ์(n) ์ ๋ ฅ๋ฐ๊ธฐ
2. ๋ฐฉํฅ ๋ฆฌ์คํธ(directions) ์ด๊ธฐํํ๊ธฐ :[(1, 0), (0, 1), (-1, 0), (0,-1)]
3. ๋ก๋ด์ ์์น์ ๋ฐฉํฅ ์ด๊ธฐํํ๊ธฐ :x = y = 0
,dir_idx = 0
4. n๊ฐ์ ๋ช ๋ น์ด ์ ๋ ฅ๋ฐ๊ธฐ
5-1. ๋ช ๋ น์ด๊ฐ TURN 0 ์ด๋ผ๋ฉด :(dir_idx+1)%4
, TURN 1 ์ด๋ผ๋ฉด :(dir_idx-1)%4
5-2. ๋ช ๋ น์ด๊ฐ MOVE d๋ผ๋ฉด :nx, ny = x+d*directions[dir_idx][0], y+d*directions[dir_idx][1]
nx, ny๊ฐ ์ ์ฌ๊ฐํ ์์ญ ์์ ์๋์ง ํ์ธ ํ, ์์ญ์ ๋ฒ์ด๋๋ฉด -1 ์ถ๋ ฅ ํ ํ๋ก๊ทธ๋จ ์ข ๋ฃ
6. ๋ชจ๋ ๋ช ๋ น ์ํ ํ ์ต์ข ๋ก๋ด์ ์์น ์ถ๋ ฅ
๐ ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
M, n = map(int, input().split())
directions = [(1, 0), (0, 1), (-1, 0), (0, -1)]
x = y = dir_idx = 0
orders = [input().split() for _ in range(n)]
for order, order_num in orders:
order_num = int(order_num)
if order == "TURN":
dir_idx = (dir_idx-1)%4 if order_num else (dir_idx+1)%4
else:
dx, dy = order_num * directions[dir_idx][0], order_num * directions[dir_idx][1]
nx, ny = x + dx, y + dy
if not (0 <= nx <= M and 0 <= ny <= M):
print(-1)
break
x, y = nx, ny
else:
print(x, y)
728x90