문제풀이/기타

[파이썬] [큐] 백준 3190 뱀

승무_ 2022. 5. 23. 17:42

문제

https://www.acmicpc.net/problem/3190

 

3190번: 뱀

 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임

www.acmicpc.net

코드

from collections import deque

n = int(input())
k = int(input())
apple = [list(map(int, input().split())) for _ in range(k)]
l = int(input())
dict = {}
for _ in range(l):
    a, b = input().split()
    dict[int(a)] = b

array = [[0] * (n + 1) for _ in range(n + 1)]

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]


def Rotate(i):
    if i < 0:
        return 3
    elif i > 3:
        return 0
    else:
        return i


for i in range(k):
    a, b = apple[i]
    array[a][b] = 2


def search():
    queue = deque()
    array[1][1] = 1
    queue.append([1, 1])
    s = 0
    d = 1
    nx, ny = 1, 1
    while True:
        s += 1
        nx += dx[d]
        ny += dy[d]
        if nx < 1 or nx > n or ny < 1 or ny > n or array[nx][ny] == 1:
            return s
        if array[nx][ny] == 2:
            queue.append([nx, ny])
            array[nx][ny] = 1
        if array[nx][ny] == 0:
            queue.append([nx, ny])
            array[nx][ny] = 1
            rx, ry = queue.popleft()
            array[rx][ry] = 0
        if s in dict:
            dire = dict[s]
            if dire == 'L':
                d = Rotate(d - 1)
            else:
                d = Rotate(d + 1)


print(search())