가장 어려운 구현은 뱀이 있는 위치를 보드위에 나타내는 방법이랑 뱀을 이동시키는 것에서 많이 장애물이 있었다. 여기서 정답코드를 봤는데 뱀의 위치정보를
큐를 이용해 저장하는 방법이 핵심!!!!! 이었다!!!!
가장 먼저 push한 위치가 헤드가 되므로 머리를 옮기고 꼬리를 옮기는 작업이 매우 편하고 자연스럽게 보드에 뱀의 위치를 나타낼 수 있어서 여기서 구현이 아주 쉽게봤다. 아쉬운점은 이 핵심 해결 방안을 내 스스로 생각해 낸 것이 아닌 정답 코드를 보고해결한게 매우 아쉬웠고 이를 바탕으로 구현 해봤다.
from collections import deque
import sys
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
def play():
res = 0
Q = deque()
Q.append((1,1))
hy = 1
hx = 1
direction = 0
while True:
#이동
hy = hy + dy[direction]
hx = hx + dx[direction]
if (hy > N or hx > N or hy < 1 or hx < 1):
return res + 1
#몸통에 닿는다면
if board[hy][hx] == 2:
return res + 1
#헤드의 진행한 위치 큐에 넣어주기
Q.append((hy,hx))
#사과가 있다면
if board[hy][hx] == 1:
board[hy][hx] = 2
#사과가 없다면
else:
board[hy][hx] = 2
ty, tx = Q.popleft()
board[ty][tx] = 0
#방향 전환유무 확인
res += 1
if res in l.keys():
#오른쪽으로 회전할 때
if l[res] == 'D':
direction +=1
direction = direction % 4
elif l[res] == 'L':
direction -=1
if direction < 0:
direction += 4
input = sys.stdin.readline
N = int(input().rstrip())
K = int(input().rstrip())
#사과 위치 정보 저장
board = [[0]*(N+1) for _ in range(N+1)]
for i in range(K):
a, b = map(int, input().split())
board[a][b] = 1
#변환 정보 저장
L_num = int(input().rstrip())
l = dict()
for i in range(L_num):
x, c = input().split()
l[int(x)] = c
result = play()
print(result)