3190 - 뱀

2022. 5. 3. 13:522022/BaekJoon_삼성 SW 역량 테스트 기출

from collections import deque
from copy import deepcopy
N = int(input())
board = [[0]*(N+1) for _ in range(N+1)]
K = int(input())
for _ in range(K):
    x, y = map(int, input().split())
    board[x][y] = 1
    
L = int(input())
timeList = []
direction = []
for _ in range(L):
    X, C = map(str, input().split())
    timeList.append(int(X))
    direction.append(C)
    
changetime = timeList.pop(0); changeDir = direction.pop(0)
time = 0
startLoc = [1, 1]
snake = deque([[1, 1]])

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

# 자기 자신과 부딪히는 경우, 벽과 부딪히는 경우 둘다 고려
while snake:
    if time == changetime:
        #왼쪽
        if changeDir == 'L':
            idx = (idx-1)%4
        else:
            idx = (idx+1)%4
        try:
            changetime = timeList.pop(0); changeDir = direction.pop(0)
        except:
            pass
        
    startLoc[0] += dx[idx]
    startLoc[1] += dy[idx]
        
    # 본인과 부딪히는 경우
    if startLoc in snake:
        time += 1
        break
    #벽에 부딪히는 경우
    if startLoc[0]>N or startLoc[0]<1 or startLoc[1]>N or startLoc[1]<1:
        time += 1
        break
    elif board[startLoc[0]][startLoc[1]] == 0:
        snake.popleft()
        snake.append(deepcopy(startLoc))
    elif board[startLoc[0]][startLoc[1]] == 1:
        board[startLoc[0]][startLoc[1]] = 0
        snake.append(deepcopy(startLoc))
    time += 1
    
print(time)

'2022 > BaekJoon_삼성 SW 역량 테스트 기출' 카테고리의 다른 글

14500 - 테트로미노*  (0) 2022.05.03
13458 - 시험감독  (0) 2022.05.03
13460 - 구슬탈출2*  (0) 2022.05.03
12100 - 2048(Easy)*  (0) 2022.05.03
14888번 - 연산자 끼워넣기*  (0) 2022.04.08