[BOJ] 3190 뱀 - Python

2021. 7. 19. 17:56Programming/Problem Solving

728x90

문제링크

간단한 구현문제였다.
따로 bfs 같은 건 사용하지 않고, 무한루프 안에서 탈출 조건을 만들어주고 구현하였다.

N = int(input())
K = int(input())
board = [[0]*(N+1) for i in range(N+1)]
dy = [1,-1,0,0]
dx = [0,0,1,-1]
for _ in range(K):
    x, y = map(int, input().split())
    board[x][y] = 1
L = int(input())
cmd = [0]*10010
for _ in range(L):
    x,c = map(str, input().split())
    cmd[int(x)] = c
snake_x, snake_y, dir = 1,1,0
board[snake_x][snake_y] = 9
snake = [[snake_x, snake_y]]
tail_x, tail_y = 1,1
time = 0
while True:
    snake_x = snake_x + dx[dir]
    snake_y = snake_y + dy[dir]

    time += 1
    if snake_x < 1 or snake_y < 1 or snake_x >N or snake_y > N or board[snake_x][snake_y] == 9:
        break

    if board[snake_x][snake_y] == 1:
        board[snake_x][snake_y] = 9
        snake.append([snake_x, snake_y])
    else:
        board[snake_x][snake_y] = 9
        snake.append([snake_x, snake_y])
        temp_x, temp_y = map(int, snake.pop(0))
        board[temp_x][temp_y] = 0

    if cmd[time] != 0:
        if dir == 0:
            if cmd[time] == 'L':
                dir = 3
            else:
                dir = 2
        elif dir == 1:
            if cmd[time] == 'L':
                dir = 2
            else:
                dir = 3
        elif dir == 2:
            if cmd[time] == 'L':
                dir = 0
            else:
                dir = 1
        elif dir == 3:
            if cmd[time] == 'L':
                dir = 1
            else:
                dir = 0
print(time)