
- 뱀이 위치한 좌표를
snake리스트에 저장- 사과가 위치한 좌표를
apple리스트에 저장- 회전 정보를
dict 형태로 저장- dx와 dy를
->로 이동하면 오른쪽 90도,<-로 이동하면 왼쪽 90도 회전한 방향이 되도록 정의
- d 방향으로 한 칸 이동한 새로운 좌표
(nx, ny)에 대해서
(nx, ny)위치에 벽이 있으면 →break(nx, ny)위치에 뱀의 일부가 있으면 →break(nx, ny)위치에 사과가 있으면 → 해당 사과를 뱀에게 먹이고 apple 리스트에서 삭제(nx, ny)위치에 사과가 없으면 → snake.pop()snake.insert(0, (nx, ny))- 이후 해당 time에 회전해야 한다면 → 회전
- 반복
사과를 뱀에게 먹인 후에는 해당 사과를 apple 리스트에서 삭제해주어야 하는데, 이 부분을 놓쳤었습니다. 혹시 디버깅중이시라면 이 부분도 같이 고려해보시면 도움이 될 것 같습니다.
n = int(input())
k = int(input())
apple = [tuple(map(int, input().split())) for _ in range(k)]
l = int(input())
rotation = dict()
for _ in range(l):
x, c = input().split()
rotation[int(x)] = -1 if c == 'L' else 1
# -> : 오른쪽 90도, <- : 왼쪽 90도
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
t = 0
d = 0
snake = [(1, 1)]
while True:
t += 1
nx = snake[0][0] + dx[d]
ny = snake[0][1] + dy[d]
if (nx, ny) in snake or not (1 <= nx <= n and 1 <= ny <= n):
print(t)
break
if (nx, ny) not in apple:
snake.pop()
else:
apple.remove((nx, ny))
if t in rotation:
d = (d + rotation[t]) % 4
snake.insert(0, (nx, ny))