티스토리 뷰

Algorithm/Baekjoon

[백준] 3190 : 뱀 - Python

Dev.sohee 2020. 7. 3. 22:01

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

 

3190번: 뱀

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

www.acmicpc.net

import sys
from collections import deque

N = int(sys.stdin.readline())
s = [[0] * N for _ in range(N)]

for _ in range(int(sys.stdin.readline())):
    r, c = map(int, sys.stdin.readline().split())
    s[r-1][c-1] = 1

change = []
L = int(sys.stdin.readline())
for _ in range(L):
    x, c = input().split()
    change.append([int(x), c])

q = deque([[0, 0]])

#상, 우, 하, 좌
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

#처음 뱡향: 오른쪽 dx[1], dy[1]
d = 1

#다음 위치
nx = 0
ny = 0

#change 배열의 index
c = 0 

res = 0

while(1):
    res += 1
    nx += dx[d]
    ny += dy[d]
    
    if change[c][0] == res:
        if change[c][1] == 'D':
            d = ((d+1) % 4)
        else:
            d = ((d-1) % 4)
         
        if c != L-1:
            c += 1
   
    if 0 <= nx < N and 0 <= ny < N:
        for i in q:
            if [nx, ny] == i:
                print(res)
                exit(0)


        #다음 위치에 사과가 있는 경우
        if s[nx][ny] == 1:
            s[nx][ny] = 0
            q.append([nx, ny])
        
        elif s[nx][ny] == 0:
            q.append([nx, ny])
            x, y = q.popleft()

    else:
        break
        
print(res)
공지사항
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함