https://www.acmicpc.net/problem/3190

 

3190번: 뱀

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

www.acmicpc.net

접근

생각보다 직관적으로 접근해서 풀 수 있었던 문제였던 것 같다.

뱀을 주어진 방향으로 한칸 이동시키는 move 함수(벽을 만나거나, 뱀의 몸체에 부딪힐 경우 실패, 사과를 만날 경우 뱀의 길이를 늘리는 코드 포함), 뱀의 방향 전환을 포함하여 뱀이 이동하는 시간을 기록하는 solve 함수를 이용하여 답을 도출할 수 있었다.

코드

from collections import deque

N = int(input())
board = [[0] * N for _ in range(N)]
K = int(input())
for _ in range(K):
    r, c = map(int, input().split())
    board[r - 1][c - 1] = 1
L = int(input())
turn = []
for _ in range(L):
    X, C = input().split()
    turn.append((int(X), C))
rc = [0, 1, 0, -1]
cc = [1, 0, -1, 0]
snake = deque([(0, 0)])
board[0][0] = 2


def move(di):
    nr, nc = snake[-1][0] + rc[di], snake[-1][1] + cc[di]
    if not (0 <= nr < N and 0 <= nc < N):
        return 0
    elif board[nr][nc] == 2:
        return 0
    elif board[nr][nc] == 1:
        snake.append((nr, nc))
        board[nr][nc] = 2
    else:
        snake.append((nr, nc))
        board[nr][nc] = 2
        dr, dc = snake.popleft()
        board[dr][dc] = 0
    return 1


def solve():
    time = 0
    res = 1
    di = 0
    turn_time = 0
    while res:
        res = move(di)
        time += 1
        if turn_time == len(turn):
            pass
        elif time == turn[turn_time][0]:
            if turn[turn_time][1] == "D":
                di += 1
            else:
                di -= 1
            di %= 4
            turn_time += 1
    print(time)


solve()

더 생각해 볼 것?

...

코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기