💻 입력 조건
💻 출력 조건
💻 입력 예시1
6 3 3 4 2 5 5 3 3 3 D 15 L 17 D
💻 출력 예시1
9
💻 입력 예시2
10 4 1 2 1 3 1 4 1 5 4 8 D 10 D 11 D 13 L
💻 출력 예시2
21
💻 입력 예시3
10 5 1 5 1 3 1 2 1 6 1 7 4 8 D 10 D 11 D 13 L
💻 출력 예시3
13
📖 문제 해결
문제에서 제시된 이동 규칙 대로 구현을 하면 해결할 수 있는 시뮬레이션 유형의 문제입니다. trace
라는 이름의 리스트에 현재 뱀의 몸이 존재하는 좌표들을 담고, 회전을 해야 할 시에는 뱀의 머리가 현재 향하고 있는 방향을 기준으로 주어진 회전 시간에 회전할 수 있도록 코드를 작성하였습니다. 뱀이 움직이면서 자신의 몸과 닿았거나, 혹은 벽에 닿게 되면 반복문을 멈추고 이동한 시간을 출력하도록 하였습니다.
# n 입력받기
n = int(input())
# x 입력받기
x = int(input())
# 사과의 좌표 입력받기
apple_coordi = []
for i in range(x):
row, col = list(map(int,input().split()))
apple_coordi.append((row-1,col-1))
# l 입력받기
l = int(input())
# 회전 정보 입력받기
rotate_coordi = []
for i in range(l):
sec, d = list(map(str,input().split()))
rotate_coordi.append((int(sec),d))
# 초를 세는 변수 count
count = 0
trace = []
trace.append((0,0))
sec, d = rotate_coordi.pop(0)
direction = (0,1)
while True:
now = trace[-1]
move = (now[0]+direction[0],now[1]+direction[1])
count += 1
# 자신의 몸과 닿았다면 멈추기
if move in trace:
break
# 상하좌우의 벽과 닿았다면 멈추기
elif max(move) > n-1 or min(move) < 0:
break
# 둘 다 아니라면 move 위치로 움직이기
else:
trace.append(move)
# 만약 사과가 있는 위치로 움직인 것이라면 사과를 먹은 후, 꼬리는 냅두기
if move in apple_coordi:
apple_coordi.remove(move)
# 사과가 없다면 꼬리 자르기
else:
trace.pop(0)
# 만약 회전을 할 시간이 되었다면 회전하기
if sec == count:
if direction == (0,1):
if d == 'L':
direction = (-1,0)
else:
direction = (1,0)
elif direction == (0,-1):
if d == 'L':
direction = (1,0)
else:
direction = (-1,0)
elif direction == (-1,0):
if d == 'L':
direction = (0,-1)
else:
direction = (0,1)
elif direction == (1,0):
if d == 'L':
direction = (0,1)
else:
direction = (0,-1)
# rotate_coordi 리스트 내에 좌표가 더 남아있다면 빼내기
if len(rotate_coordi) != 0:
sec, d = rotate_coordi.pop(0)
# 게임이 끝나는 시간을 출력
print(count)