[파이썬] 백준 3190번 뱀
작성:
백준 #3190 뱀
# 사과를 먹으면 뱀 길이가 늘어난다.
# 벽 or 자기자신의 몸과 부딪히면 게임이 끝
# N x N
# 움직임
# 머리를 다음 칸에 위치
# 이동한 칸에 사과가 있다면 사과 없어지고 꼬리는 움직이지 않는다.
# 이동한 칸에 사과가 없다면 몸 길이를 줄여 꼬리가 위치한 칸을 비워준다.
# 출력: 게임이 끝나는 시간 (초)
# 보드 위 사과 - 2 / 뱀 위치 - 1 / 빈칸 - 0
# 뱀을 하나의 큐로 생각하고 좌표를 저장한다.
# 조건에 맞춰서 요소를 빼고 field(board)에 표시한다.
from collections import deque
def solution(N):
field = [[0 for i in range(N)] for j in range(N)]
K = int(input())
for k in range(K):
y, x = map(int, input().split())
field[y-1][x-1] = 2
snake = deque()
direc = [0 for i in range(10001)]
for i in range(int(input())):
t, d = input().split()
direc[int(t)] = d
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
idx = 0
ny, nx = 0, 1
snake.append((0, 0))
field[0][0] = 1
t = 1
while 0 <= ny < N and 0 <= nx < N and field[ny][nx] != 1:
snake.append((ny, nx))
if field[ny][nx] == 2:
field[ny][nx] = 1
elif field[ny][nx] == 1:
break
else:
field[ny][nx] = 1
a, b = snake.popleft()
field[a][b] = 0
if direc[t] == 'L':
idx = (idx - 1) % 4
elif direc[t] == 'D':
idx = (idx + 1) % 4
t += 1
ny += dy[idx]
nx += dx[idx]
print(t)
if __name__ == '__main__':
solution(int(input()))
댓글남기기