동까의 코딩

[Python] 백준 3190 뱀 본문

문제 풀이/백준

[Python] 백준 3190 뱀

동까의 코딩 2024. 12. 13. 19:03
반응형

 

오늘은 구현 문제의 기본인 뱀 문제를 풀어보았습니다.

from collections import deque

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

N = int(input())
K = int(input())
board = [[0] * (N + 1) for i in range(N + 1)]
visited = [[False] * (N + 1) for i in range(N + 1)]
queue = deque()
queue.append((1, 1))
board[1][1] = 1 # 1 = 뱀 / -1 = 사과
visited[1][1] = True

for i in range(K):
    a, b = map(int, input().split())
    board[a][b] = -1    # 사과 표시

L = int(input())
l = 0 # 방향 전환을 위한 index

change_move = []

for _ in range(L):
    a, b = map(str, input().split())
    change_move.append((a, b))
cnt = 0
d = 0

while True:
    if l < len(change_move):
        a, b = change_move[l]
        if cnt == int(a):
            if b == 'D':
                d = (d + 1) % 4
            else:
                d = (d - 1) % 4
            l += 1

    x, y = queue[0]
    rx, ry = x + dx[d], y + dy[d]
    if 0 >= rx or rx >= N + 1 or 0 >= ry or ry >= N + 1:
        cnt += 1
        break
    else:
        if board[rx][ry] == -1:
            board[rx][ry] = 1
            queue.appendleft((rx, ry))
            visited[rx][ry] = True
            
        elif visited[rx][ry] == True or board[rx][ry] == 1:
            cnt += 1
            break
        else:
            board[rx][ry] = 1
            board[rx][ry] = True
            queue.appendleft((rx, ry))
            a, b = queue.pop()
            visited[a][b] = False
            board[a][b] = 0
    cnt += 1
print(cnt)

 

queue를 사용하여 뱀을 저장한 후 visited를 만들어주어 뱀이 현재 위치한 공간을 표시하여 겹치면 끝나는 조건을 맞춰주었습니다.

 

오랜만에 구현 문제를 풀어보니 어려움이 많았으므로 자주 더 많은 문제를 풀어보겠습니다.

반응형