본문 바로가기

뱀 [3190] with 파이썬 본문

Algorithms/Simulation

뱀 [3190] with 파이썬

Louisus 2020. 5. 26. 19:10
728x90

from collections import deque

N =
int(input())
K =
int(input())

# 지도
map_list = [[0]*N for _ in range(N)]

# 사과 위치
for _ in range(K):
    y
, x = map(int, input().split())
    map_list[y-
1][x-1] = 2

# / 회전방향
L = int(input())
change = {}

for i in range(L):
    time
, dir = map(str, input().split())
    change[
int(time)] = dir

direction =
0
#
dirs = {0:(0,1),1:(0,-1),2:(1,0),3:(-1,0)}

def change_dir(direction, dir):
   
if direction == 0:
       
if dir == 'D':
           
return 2
       
else:
           
return 3
   
elif direction == 1:
       
if dir == 'D':
           
return 3
       
else:
           
return 2
   
elif direction == 2:
       
if dir == 'D':
           
return 1
       
else:
           
return 0
   
else:
       
if dir == 'D':
           
return 0
       
else:
           
return 1

time = 0
y, x = 0, 0

snake = deque()
snake.append((y
,x))

while True:
    time+=
1
   
dy, dx = dirs[direction]
    ny
, nx = y + dy, x +dx

   
# 보드 위에 있을 경우
   
if 0 <= ny < N and 0 <= nx < N:
       
# 사과인 경우
       
if map_list[ny][nx] == 2:
            snake.appendleft((ny
,nx))
            map_list[ny][nx] =
1

       
# 경우
       
elif map_list[ny][nx] == 0:
            map_list[ny][nx] =
1
           
snake.appendleft((ny,nx))
            tail_y
, tail_x = snake.pop()
            map_list[tail_y][tail_x] =
0

       
# 자기 몸에 부딪힌 경우
        
elif map_list[ny][nx] == 1:
           
break
       
y, x = ny, nx

       
# 방향 변환해야 하는 시간인 경우
       
if time in change:
            direction = change_dir(direction
, change[time])
   
else:
       
break
print(time)

 

# 문제에서 보드의 상하좌우 끝에 벽이 있다고 해서 0행 N-1행 / 0열 N-1열이 모두 1인 줄 알았지만 사과 위치를 보고 벽은 배열 인덱스 초과한 경우라는 것을 유추함

 

# 처음에 뱀이 꺾여서도 위치한 자리를 다 알고 있어야 한다는 생각에 너무 복잡하게 생각함... 꺾인 자리를 모두 변수에 저장하여 위치 비교...

 

# 문제에서 사과 위치도 헷갈렸음... 

 

# 단순히 문제대로만 따라가니 정답...

'Algorithms > Simulation' 카테고리의 다른 글

iSharp [3568] with 파이썬  (0) 2020.05.29
드래곤 커브 [15685] with 파이썬  (0) 2020.05.27
[5/25] 취준 Blog Memo - Day 28  (0) 2020.05.26
경사로 [14890] with 파이썬  (0) 2020.05.26
로봇청소기 [14053] with 파이썬  (0) 2020.05.26
Comments