[PCCP 실전모의고사 #2_01] 실습용 로봇

Soorim Yoon·2022년 11월 4일
0
post-thumbnail

문제

실습용 로봇 (문제 보기)

  • command 문자열로 다음 명령어의 조합이 주어질 때, 명령에 따라 실습용 로봇이 최종 이동한 좌표를 구해라.
    • '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]

실행 결과

profile
👩🏻‍💻 AI를 좋아하는 IT학부생

0개의 댓글