n = int(input())
apple = []
k = int(input())
for i in range(k) :
y, x = map(int, input().split())
apple.append([y, x])
order = []
l = int(input())
for i in range(l) :
X, C = input().split()
order.append([int(X), C])
right = [0, 1]
# down = [1, 0]
# left = [0, -1]
# up = [-1, 0]
def drift(d, lr) :
if lr == 'D' :
return [d[1], -d[0]]
if lr == 'L' :
return [-d[1], d[0]]
snake = [[1,1]]
direction = right
t = 0
while True :
t = t + 1
head = [snake[0][0] + direction[0], snake[0][1] + direction[1]]
if head[0] == 0 or head[0] == n+1 or head[1] == 0 or head[1] == n+1 or head in snake :
print(t)
break
snake.insert(0, head)
if head in apple :
apple.remove(head)
else :
del snake[-1]
if [t, 'L'] in order :
direction = drift(direction, 'L')
if [t, 'D'] in order :
direction = drift(direction, 'D')
|
입력받은 사과와 조종주문을 list로 저장해둔다.
진행방향 direction을 바꾸는 함수 drift를 정의한다.
snake는 매 시간 t마다 direction의 방향으로 1칸 움직인다.
이때 움직인 위치가 apple에 있다면 꼬리([-1])가 del되지 않는다.
행동을 마친 뒤 현재시각 t에 방향을 바꾸는 order가 있다면 방향을 바꾼다.
위를 반복하다가 움직인 위치가 맵 밖이거나 snake의 몸통일 때 t를 프린트하고 끝난다.
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 1655 가운데를 말해요 (0) | 2021.11.15 |
---|---|
파이썬 백준 11279 최대 힙 (0) | 2021.11.15 |
파이썬 백준 11866 요세푸스 문제 0 (0) | 2021.11.15 |
파이썬 백준 2164 카드2 (0) | 2021.11.15 |
파이썬 백준 18258 큐2 (0) | 2021.11.15 |