문제
접근
- 최대한 단순하게 문제에서 주어진 규칙을 맞추려고 해보자.
- 보드판 위에 사과는 1, 뱀이 위치한 곳은 2, 나머지는 0으로 생각하고 접근하자.
- 뱀의 몸 길이에 관한 내용은 현재 위치와 다음 위치를 2로 만들고 주어진 조건에 따라 현재 위치를 0으로 바꿀지, 그대로 두고 다음 위치로 넘어갈지를 생각하면 된다.
- 방향 변환을 위해 먼저 뱀이 움직일 때 마다 time을 카운팅한다.
- 동, 남, 서, 북 순서로 방향 좌표를 만들어 두고, L인지 D인지에 따라 방향을 바꿀 수 있도록 함수를 정의하자.
내 코드
from collections import deque
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def rotate(dir, c):
if c == 'L':
direction = (dir - 1) % 4
else:
direction = (dir + 1) % 4
return direction
N = int(input())
board = [[0] * (N+1) for _ in range(N+1)]
K = int(input())
for _ in range(K):
row, col = map(int, input().split())
board[row][col] = 1
L = int(input())
info = []
for _ in range(L):
x, c = input().split()
info.append((int(x), c))
time = 0
dir = 0
info_index = 0
x, y = 1, 1
board[x][y] = 2
queue = deque()
queue.append((x, y))
while True:
nx = x + dx[dir]
ny = y + dy[dir]
if 1 <= nx <= N and 1 <= ny <= N and board[nx][ny] != 2:
if board[nx][ny] == 0:
board[nx][ny] = 2
cur_x, cur_y = queue.popleft()
board[cur_x][cur_y] = 0
queue.append((nx, ny))
if board[nx][ny] == 1:
board[nx][ny] = 2
queue.append((nx, ny))
else:
time += 1
break
x, y = nx, ny
time += 1
if info_index < L and info[info_index][0] == time:
dir = rotate(dir, info[info_index][1])
info_index += 1
print(time)