딱히 기발한 풀이가 생각나지 않았기에 최대한 주어진 걸 깔끔하게 구현하려 노력했던 문제였다. 완벽하게 기능하기까지 코드 작성부터 디버깅까지 많은 시간을 잡아먹은 코드라 뭐랄까 내 코드에 애착이 간다. 뭔가 변태같지만 진짜 내 코드가 이뻐보이는 걸 어떡해 😄
import sys
import itertools
from collections import deque
N = int(sys.stdin.readline())
K = int(sys.stdin.readline())
apples = [list(map(int, sys.stdin.readline().split())) for _ in range(K)]
L = int(sys.stdin.readline())
moves = [list(sys.stdin.readline().split()) for _ in range(L)]
direction = deque([1, 0, 0, 0])
def checkDirection():
global sec, direction
if moves:
if sec == int(moves[0][0]):
if moves[0][1] == 'L':
temp = direction.popleft()
direction.append(temp)
elif moves[0][1] == 'D':
temp = direction.pop()
direction.appendleft(temp)
del moves[0]
def moveSnake():
global snake, direction
if direction == deque([1, 0, 0, 0]):
snake.appendleft([snake[0][0], snake[0][1]+1])
elif direction == deque([0, 0, 0, 1]):
snake.appendleft([snake[0][0]-1, snake[0][1]])
elif direction == deque([0, 0, 1, 0]):
snake.appendleft([snake[0][0], snake[0][1]-1])
elif direction == deque([0, 1, 0, 0]):
snake.appendleft([snake[0][0]+1, snake[0][1]])
def checkApple():
global snake, apples
if snake[0] in apples:
apples.remove(snake[0])
else:
snake.pop()
sec = 0
snake = deque([[1,1]])
while True:
sec += 1
moveSnake()
if len(snake) > 1:
if snake[0] in list(itertools.islice(snake, 1, len(snake))):
print(sec)
break
if snake[0][0] > N or snake[0][1] > N or snake[0][0] <= 0 or snake[0][1] <= 0:
print(sec)
break
checkApple()
checkDirection()