[백준/파이썬] 3190번 뱀 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 3190번 뱀
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
보드 위 뱀이 사과를 먹으며 이동할 때 벽 또는 자기 몸과 부딪히는 시간을 구하는 문제입니다.
코드
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로 관리하며 매 초 머리를 전진시키고,
사과 여부에 따라 꼬리를 유지/삭제하는 방식으로 시뮬레이션합니다.
충돌 시점을 계산해 정답 시간을 출력합니다.
댓글남기기