n = int(input()) # 보드의 크기
k = int(input()) # 사과의 개수
board = [[0] * (n+1) for _ in range(n+1)] # 보드 초기화
for _ in range(k):
row, col = map(int, input().split())
board[row][col] = 1 # 사과의 위치
l = int(input()) # 방향 변환 정보 개수
info = [list(map(str, input().split())) for _ in range(l)] # 방향 변환 정보 저장
dx = [0, -1, 0, 1] # 동, 북, 서, 남
dy = [1, 0, -1, 0]
def change_direction(direction, change):
if change == 'L': # 왼쪽으로 회전
direction = (direction-1) % 4
if change == 'D': # 오른쪽으로 회전
direction = (direction+1) % 4
return direction
def solution():
cx, cy = 1, 1 # 뱀의 초기 위치
snake = [(cx, cy)] # 뱀의 위치 정보를 저장할 리스트
board[cx][cy] = 2 # 뱀의 위치 표시
direction = 0 # 초기 방향 (동쪽)
elapsed_time = 0 # 경과 시간
index = 0 # 방향 변환 정보 인덱스
while True:
nx, ny = cx + dx[direction], cy + dy[direction] # 다음 위치 계산
if 0 < nx < n and 0 < ny < n and board[nx][ny] != 2: # 벽이나 몸에 부딪히지 않았다면
if board[nx][ny] == 1: # 사과가 있다면
board[nx][ny] = 2 # 뱀의 위치 표시
snake.append((nx, ny)) # 뱀의 위치 정보 추가
else:
board[nx][ny] = 2 # 뱀의 위치 표시
snake.append((nx, ny)) # 뱀의 위치 정보 추가
x, y = snake.pop(0) # 꼬리 제거
board[x][y] = 0 # 꼬리 위치 초기화
cx, cy = nx, ny # 뱀의 머리 위치 업데이트
elapsed_time += 1 # 경과 시간 증가
else: # 벽이나 몸에 부딪혔다면 종료
elapsed_time += 1 # 경과 시간 증가
break
if index < len(info) and elapsed_time == int(info[index][0]): # 방향 변환 시간이 되면
direction = change_direction(direction, info[index][1]) # 방향 변환
index += 1 # 다음 방향 변환 정보로 이동
return elapsed_time # 경과 시간 반환
print(solution())
6
3
3 4
2 5
5 3
3
3 D
15 L
17 D
>> 9
입력값 받기: 입력값으로는 보드의 크기 n, 사과의 개수 k, 사과의 위치 정보 arr, 방향 변환 정보 개수 l, 방향 변환 정보 info가 주어진다.
보드 초기화: board라는 2차원 리스트를 만들어 보드를 초기화한다. 초기에는 사과가 없으므로 모든 위치의 값은 0으로 설정된다.
방향 변환 함수 만들기: change_direction 함수를 정의한다. 이 함수는 현재 방향(direction)과 방향 변환 정보(change)를 받아 새로운 방향을 결정한다. 왼쪽으로 회전할 때는 현재 방향에서 1을 뺀 뒤 4로 나눈 나머지를, 오른쪽으로 회전할 때는 현재 방향에서 1을 더한 뒤 4로 나눈 나머지를 반환한다.
게임 진행 함수 만들기: solution 함수를 정의한다. 이 함수는 게임을 진행하고 경과 시간을 반환한다.
초기 설정: 뱀의 초기 위치(cx, cy)를 (1, 1)로 설정하고, 뱀의 위치를 저장할 리스트인 snake에 초기 위치를 추가한다. 또한, 초기 위치에 뱀이 있음을 board에 표시한다.
게임 진행: 게임이 진행되는 동안 다음을 반복한다.
방향 변환 정보 처리: info 리스트를 차례대로 확인하면서 경과 시간이 해당 정보의 시간과 일치하는지 확인한다. 일치하는 경우에는 방향을 변경한다.
경과 시간 반환: 게임 종료 후 경과 시간을 반환한다.
결과 출력: solution 함수를 호출하여 경과 시간을 출력한다.