[백준/파이썬] 3190번 뱀 풀이

업데이트:



문제 정보


풀이

문제

보드 위 뱀이 사과를 먹으며 이동할 때 벽 또는 자기 몸과 부딪히는 시간을 구하는 문제입니다.

코드

from collections import deque

n = int(input())
k = int(input())
apples = set([tuple(map(int, input().split())) for _ in range(k)])
l = int(input())
moves = deque(map(lambda x:(int(x[0]), x[1]), [input().split() for _ in range(l)]))
snake = deque([(1,1)])
time = headDir = 0
directions = [(0, 1), (1, 0), (0, -1), (-1, -0)]

while True:
    # 다음 머리 위치
    i = snake[0][0] + directions[headDir][0]
    j = snake[0][1] + directions[headDir][1]

    # 충돌 검사
    if not (0 < i <= n) or\
       not (0 < j <= n) or\
       (i, j) in snake: break

    # 사과를 먹었는지 여부 검사
    if (i, j) in apples: apples.remove((i, j))
    else: snake.pop()

    # 머리 움직임
    snake.appendleft((i, j))

    # 시간 흐름
    time += 1

    # 주어진 방향 변환 정보 반영
    if moves and time >= moves[0][0]:
        if moves[0][1] == 'L': headDir -= 1
        elif moves[0][1] == 'D': headDir += 1
        headDir %= 4
        moves.popleft()
    
print(time + 1)

설명

뱀 몸통을 deque로 관리하며 매 초 머리를 전진시키고, 사과 여부에 따라 꼬리를 유지/삭제하는 방식으로 시뮬레이션합니다. 충돌 시점을 계산해 정답 시간을 출력합니다.



댓글남기기