[Python] 백준 3190번: 뱀

Jonie Kwon·2022년 4월 24일
1

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

풀이

  • 뱀의 몸통이 위치한 좌표는 1, 사과는 2, 아무것도 없을 경우 0으로 표시
  • maps : 사과의 위치가 나타나있는 n * n의 지도정보
  • info : 뱀의 방향변환 정보(시간이 key, 전환방향이 value로 들어있는 딕셔너리)
  • snakes : 뱀이 차지하고 있는 좌표가 들어있는 deque(사과를 먹지 못하면 꼬리부터 없애야 하므로 popleft)

코드

import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
k = int(input())
maps = [[0] * (n+1) for _ in range(n+1)]
for _ in range(k):#사과의 위치
    x,y = map(int,input().split())
    maps[x][y] = 2
info = {}
l = int(input())
for _ in range(l):# 뱀의 방향변환정보 (초, 방향 L:왼쪽 D:오른쪽)
    sec, direct = input().split()
    info[int(sec)] = direct
time = 0
dx = [1,0,-1,0]
dy = [0,1,0,-1]
x, y = 1, 1
maps[y][x] = 1
d = 0
snakes = deque([(1, 1)])

while True:
    nx, ny = x+dx[d], y+dy[d]
    # 뱀의 몸통에 닿거나 벽에 부딪히는 경우 종료
    if nx<=0 or ny<=0 or nx>n or ny>n or (nx,ny) in snakes:
        break
    # 사과를 먹지 못하면 꼬리 없애기
    if maps[ny][nx]!=2:
        a,b = snakes.popleft()
        maps[b][a]=0
    x, y = nx, ny
    maps[y][x] = 1
    snakes.append((nx, ny))
    time+=1
	
    # 시간에 해당하는 방향전환 정보가 있을 경우
    if time in info.keys():
        if info[time] == "D":
            d = (d+1)%4
        else:
            nd = 3 if d==0 else d-1
            d = nd
print(time+1)
profile
메모하는 습관

0개의 댓글