골드5 문제
시뮬레이션 (1시간 20분 소요)
from collections import deque
def change(dire, num): # 방향변환 함수
if (dire == 'L'):
if num == 3: num = 0
else: num += 1
else:
if num == 0: num = 3
else: num -= 1
return num
def move(hh, ww, dire): # 이동하는 좌표 변환 함수
if ( dire == 0 ): ww += 1
elif ( dire == 1 ): hh -= 1
elif ( dire == 2 ): ww -= 1
elif ( dire == 3 ): hh += 1
# 뱀이 지도 밖으로 나가는 경우도 고려
if ( hh < 1 or hh > n or ww < 1 or ww > n ):
hh, ww = 999, 999
return hh, ww
n = int(input())
k = int(input())
arr = [[0] * (n+1) for _ in range(n+1)]
snake = deque([[1, 1]])
second = 0
toward = 0 # 방향숫자 : 동북서남(0,1,2,3)
h, w = 1, 1
for _ in range(k):
y, x = map(int, input().split())
arr[y][x] = 1
L = int(input())
direction = deque([])
for _ in range(L):
x, c = input().split()
x = int(x)
direction.append([x, c])
while True:
second += 1 # 시간 흐름
h, w = move(h, w, toward) # 이동 (방향 고려)
# 지도 밖으로 나가면 종료
if (h == 999 and w == 999):
break
# 머리와 꼬리가 부딪히면 종료
#if ( h == snake[-1][0] and w == snake[-1][1] ):
# break
# 머리가 몸통과 부딪히면 종료
if ([h, w] in snake):
break
# 이동한 곳에 사과가 있는지 확인
if ( arr[h][w] == 1 ):
snake.appendleft([h, w])
arr[h][w] = 0
else:
snake.appendleft([h, w])
snake.pop()
# 움직이고, 끝나면 방향 회전 (리스트가 비어있으면 그냥 지나감)
if ( len(direction) != 0 and direction[0][0] == second ):
direct = direction[0][1]
direction.popleft()
# 방향 회전 (LD와 방향숫자를 통째로 함수에 넘김)
toward = change(direct, toward)
# 종료 조건
if ( len(snake) == 0 ):
break
print(second)