코딩테스트[파이썬]/입문자를 위한 코딩테스트 핵심

[시물레이션] - 로봇의 이동

softmoca__ 2024. 1. 22. 16:59
목차

로봇의 이동

이차원 배열 격자판 0행 0열에 로봇이 3시 방향을 보고 있습니다.

로봇은 다음 규칙에 따라 이동합니다.
1. 'G' 명령을 주면 보고 있는 방향으로 한 칸 이동합니다. 격자 밖으로 나가는 명령은 하지 않습니다.
2. 'R' 명령을 주면 오른쪽으로 90도 회전합니다.
3. 'L' 명령을 주면 왼쪽으로 90도 회전합니다.
매개변수 moves에 로봇에 명령을 내린 문자들이 차례대로 나열된 명령 문자열이 주어지면 이 명령 문자열을 로봇이 모두 수행했을 때 최종 위치를 반환하는 프로그램을 작성하세요.

입력예시 1의 경우

제한사항:
• moves의 길이는 100을 넘지 않습니다.
• 2차원 배열 격자판의 크기는 100*100입니다. 입력예제 1 설명 :

 

나의코드

def solution(moves):
    x = y = 0
    dx=[-1,0,1,0]
    dy=[0,1,0,-1]
    d=1
    for z in moves:
        if z=='G':
            x=x+dx[d]
            y=y+dy[d]
        elif z=='R':
            d=(d+1)%4
        elif z=='L':
            d=(d+3)%4

    return [x, y]
                      
print(solution('GGGRGGG'))
print(solution('GGRGGG'))
print(solution('GGGGGGGRGGGRGGRGGGLGGG'))
print(solution('GGLLLGLGGG'))

d 방향 벡터를 사용하여 '회전 명령'에 대한 로직으로 d를 조작하였다.

d가 0인경우 왼쪽으로 돌아 -3이 되는 것과 d가 3인경우 오른쪽으로 돌아 다시 0으로 되는 것을 고려하여 %를 사용하였다.

 

정답 코드

def solution(moves):
    dx = [-1, 0, 1, 0]
    dy = [0, 1, 0, -1]
    x = y = 0
    d = 1
    for c in moves:
        if c == 'G':
            x = x + dx[d]
            y = y + dy[d]
        elif c == 'R':
            d = (d + 1) % 4
        elif c == 'L':
            d = (d - 1) % 4

    return [x, y]
                      
print(solution('GGGRGGG'))
print(solution('GGRGGG'))
print(solution('GGGGGGGRGGGRGGRGGGLGGG'))
print(solution('GGLLLGLGGG'))

정답코드는 L의 경우 d-1을 사용 하였다.

확인해보니 d-1의 경우에도 d+3과 같은 작동을 하지만 파이썬에서만 자동으로 처리해주는것 같다.

그래도 가독성이나 직관적 이해로 보아 d+3이 훨씬 나은것 같다..!