📊알고리즘, 문제풀이/📈문제풀이 (PS)

[알고리즘][Python] 백준 3190 뱀 문제 풀이

Written by Donghak Park

문제 출처 : www.acmicpc.net/problem/3190

 

3190번: 뱀

 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임

www.acmicpc.net


문제 해석 : 뱀이 사과를 먹으면 몸의 길이가 늘어나며 경로를 따라 움직입니다. 자신의 몸이나 벽에 부딪히면 게임이 끝나며 이때 시간을 출력합니다.

 

문제 풀이 : 구현 문제로서 문제에서 제시하는 조건들을 모두 만족시키게 차근차근 풀이를 진행하면 풀 수 있습니다.


풀이 코드

N = int(input())
K = int(input())

board = [[0] * N for _ in range(N)]

for _ in range(K):
    r, c = map(int, input().split())
    board[r-1][c-1] = 2

L = int(input())
snake = []

for _ in range(L):
    snake.append(input().split())

x,y = 0, 0

snake_direction = 0

tail = []
tail.append([0,0])

dx = [0,1,0,-1]
dy = [1,0,-1,0]

board[0][0] = 1
time = 0

while True:
    if len(snake) != 0:
        if time == int(snake[0][0]):
            D = snake.pop(0)[1]
            if D == "D":
                snake_direction = ( snake_direction + 1 ) % 4
            else:
                snake_direction = (snake_direction - 1) % 4

    nx = x + dx[snake_direction]
    ny = y + dy[snake_direction]

    if nx < 0 or ny < 0 or nx >= N or ny >= N or board[nx][ny] == 1:
        time += 1
        break
    else:
        if board[nx][ny] == 2:
            board[nx][ny] = 1
            tail.append([nx, ny])
        else:
            t_x, t_y = tail.pop(0)
            board[t_x][t_y] = 0
            board[nx][ny] = 1
            tail.append([nx,ny])
    x,y = nx, ny

    time += 1

print(time)

author : donghak park
contact : donghark03@naver.com

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.