3190. 뱀

jp·2021년 11월 7일
0

baekjoon

목록 보기
11/15

문제

코드

#3190. 뱀
dirs = [(-1, 0), (0, 1), (1, 0), (0, -1)]
d, sec = 1, 0 # 방향, 초
def play():
    global d, sec
    q = [(0,0)] # 뱀의 길이를 저장할 큐
    while q:
        i, j = q[-1]
        arr[i][j] = -1 # 뱀 위치 기록

        if sec in command:
            if command[sec] == 'D':
                d = (d+1)%4
            else:
                d = (d-1)%4

        ni, nj = i+dirs[d][0], j+dirs[d][1]
        if not (0<=ni<N) or not (0<=nj<N): # 하나라도 범위를 벗어나면 끝
            return sec+1
        elif arr[ni][nj] == -1: # 뱀 몸통에 닿으면 끝
            return sec+1
        if arr[ni][nj] == 1: # 사과 면
            arr[ni][nj] = -1 # 사과 없애고 뱀 기록
            q.append((ni,nj)) # 머리 붙여
        else:
            arr[ni][nj] = -1 # 경로 기록
            q.append((ni,nj)) # 머리 앞으로
            x, y = q.pop(0) # 꼬리 비우기
            arr[x][y] = 0
        sec += 1

N, K = int(input()), int(input())
arr = [[0]*N for _ in range(N)]
for _ in range(K):
    c, r = map(int, input().split())
    arr[c-1][r-1] = 1

L = int(input())
command = {}
for _ in range(L):
    x, c = input().split()
    command[int(x)] = c
print(play())

풀이

예제 3번이 이해가안되어서 찾아보니 내가 지문에서 놓친 부분이 있다는 걸 깨달았다 -> https://www.acmicpc.net/board/view/47208
몸을 늘려 머리가 먼저 나간 후에!!! 사과가 있으면 그대로, 사과가 없으면 몸 길이를 다시 줄이는것!!! 머리가 먼저 나가기 때문에 예제 3번은 자기 몸통에 머리 박아서 게임오버 되는 거였다

내가 구현문제 풀때 이상하게 해석해서 막막한것이 너무 많음... 내가 못읽는 거지만 중요한 단서가 자꾸 안보인다... 알고리즘 문제는 유독 이상하게 써놓은게 많은 듯...
그래도 한방컷 ^^v

profile
응애 개발자지망생이 알고리즘에 고통받는 중

0개의 댓글