코딩테스트

[이코테] 뱀

Patti Smith 2024. 1. 26.

 

# 뱀
from collections import deque

n = int(input())
k = int(input())

apples = [ [0] * n for _ in range(n) ]
for _ in range(k) :
    a, b = map(int, input().split())
    apples[a - 1][b - 1] = 1

snake = deque()
snake.append((0,0))

l = int(input())
moving = []
for _ in range(l) :
    moving.append(list(map(str, input().split())))

count = 0
dx = [-1, 0, 1, 0] # 상 우 하 좌
dy = [0, 1, 0, -1]

direction = 1

def turn(dir) :
    global direction
    
    if dir == 'D' :
        if direction != 3 :
            direction += 1
        else :
            direction = 0
    else :
        if direction != 0 :
            direction -= 1
        else :
            direction = 3
    return

a, b = 0, 0 # 머리
ta, tb = 0, 0 # 꼬리
breaker = False
start = 1

change = 0
# 벽에 부딪힐 때까지, 자기 몸에 부딪힐 때까지.
while True :
    # 몸을 움직인다.
    # 방향 전환
    start = count + 1
    for _ in range(start, int(moving[change][0]) + 1):
        na = a + dx[direction] 
        nb = b + dy[direction] 

        if na >= n or na < 0 or nb >= n or nb < 0 or (na, nb) in snake:
            count += 1
            breaker = True
            break

        print(na, nb)
        a = na
        b = nb
        if apples[a][b] == 1 :
            apples[a][b] = 0
            snake.append((a,b))
            
        else :
            snake.popleft()
            snake.append((a,b)) 
            
        count += 1
        
    if breaker == True :
        break
    if change in moving.keys() :
        turn(moving[change][1])
        change += 1
    
print(count)

'코딩테스트' 카테고리의 다른 글

[5347] LCM  (0) 2024.02.20
[20546] 기적의 매매법  (1) 2024.01.31
[이코테] 무지의 먹방 라이브  (0) 2024.01.24
[이코테] 볼링공 고르기  (0) 2024.01.23
[이코테] 만들 수 없는 금액  (0) 2024.01.19

댓글