[BOJ] 3190 - 뱀

김우경·2021년 1월 1일
0

삼성기출

목록 보기
3/37

문제 링크

문제 설명

dummy라는 게임이 있다. N*N크기의 보드 위에 뱀이 기어다니는데, 사과를 먹으면 뱀의 길이가 1 증가하고, 벽이나 자기 자신에 부딪히면 게임이 끝난다. 뱀은 (0,0)의 위치에서 길이 1로 시작한다. 몸 길이를 늘려서 머리를 다음칸으로 이동하는데, 다음 칸에 사과가 있으면 사과를 없애고 꼬리를 움직이지 않고, 사과가 없으면 몸길이를 줄여서 꼬리 칸을 비운다.

문제 풀이

import sys
input = sys.stdin.readline

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

N = int(input()) #보드의 크기
board = [[0]*N for _ in range(N)]
K = int(input()) #사과의 개수
for _ in range(K):
    apples_x, apples_y = map(int, input().split())
    board[apples_x-1][apples_y-1] = 2
L = int(input()) #회전 횟수
directions = {}
for _ in range(L):
    t, d = input().split()
    directions[int(t)] = d
time = 0
snake = [[0,0]]
board[0][0] = 1
dirc = 3

while True:
    #방향 이동이 있으면
    if time in directions.keys():
        dir = directions[time]
        if dir == 'L':
            dirc = (dirc+1)%4
        else:
            dirc = (dirc+3)%4
    time += 1
    #머리 이동시키기
    nx, ny = snake[-1][0]+dx[dirc], snake[-1][1]+dy[dirc]
    #다음 칸이 벽이나 뱀이면
    if not (0<=nx<N and 0<=ny<N) or [nx, ny] in snake:
        break
    #다음 칸이 빈칸면
    elif board[nx][ny] == 0:
        board[snake[0][0]][snake[0][1]] = 0
        snake.pop(0)
    board[nx][ny] = 1
    snake.append([nx,ny])

print(time)
    

두달만에 다시 풀어봤는데 X초가 끝난 뒤에 왼쪽(C가 'L') 또는 오른쪽(C가 'D')로 90도 방향을 회전 부분에서 햇갈려서 좀 헤맸다,,ㅠ 구현은 문제 잘 읽고 시키는대로 짜기,,

profile
Hongik CE

0개의 댓글