- 'R': 로봇이 오른쪽으로 90도 회전합니다.
- 'L': 로봇이 왼쪽으로 90도 회전합니다.
- 'G': 로봇이 한 칸 전진합니다.
- 'B': 로봇이 한 칸 후진합니다.
기존에 미로찾기 등 dfs/bfs 문제를 풀면서, dx와 dy 배열을 선언해 좌표 이동 값을 저장하고, 리스트의 인덱스 번호를 지정해 해당 값 만큼 좌표 평면 위를 이동하였다.
이 문제 또한 각 방향에 대해 이동하는 dxy 리스트를 선언하여 각 방향으로 이동 시 움직이게 되는 좌표 값을 미리 선언한다.
이때 해당 문제의 경우 방향 전환이 중요하므로 시계의 12시, 3시, 6시, 9시 방향에서 앞으로 한 칸 이동하였을 때 움직이게 되는 좌표 값을 dxy에 저장해둔다.
- dxy 리스트의 인덱스 번호에 +1을 하는 경우 오른쪽으로 회전(시계 방향)한다.
- dxy 리스트의 인덱스 번호에 -1을 하는 경우 왼쪽으로 회전(반시계 방향)한다.
전진하는 경우 x, y에 새로운 d값에 따른 dxy[d][0]과 dxy[d][1]을 더해 좌표 값을 갱신한다.
후진하는 경우 x, y에 현재 d값에 따른 dxy[d][0]과 dxy[d][1]을 빼주어 좌표 값을 갱신한다.
# R L G(전진) B(후진)
def solution(command):
dxy = [[0, 1], [1, 0], [0, -1], [-1, 0]] # 12시, 3시, 6시, 9시 방향을 바라보며 1칸 전진
x = 0 # x좌표
y = 0 # y좌표
d = 0 # 방향 (dxy 배열의 d번째 배열을 선택해 좌표이동함)
for c in command:
if c == 'R':
d = (d+1)%4
elif c == 'L':
d = (d-1)%4
elif c == 'G':
x = x + dxy[d][0]
y = y + dxy[d][1]
elif c == 'B':
x = x - dxy[d][0]
y = y - dxy[d][1]
return [x, y]
실행 결과