[PCCP] 시뮬레이션 - 로봇의 이동 | 파이썬

SangJin Ham·2023년 6월 26일
0
post-thumbnail

코딩테스트 역량 강화 교육(거점형 특화 프로그램)이라는 프로그램에 참여해 공부한 내용입니다.


앞서 공부한 시뮬레이션 - 청소 로봇(ver 1)을 약간 변형한 문제인 로봇의 이동 문제를 풀어보겠다.

로봇의 이동


문제

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

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


입출력 예

입력(moves)출력(answer)
'GGGRGGG'[3, 3]
'GGRGGG'[3, 2]
'GGGGGGGRGGGRGGRGGGLGGG'[0, 2]
'GGLLLGLGGG'[1, 5]

입력예제 1 설명 :


제한사항

• moves의 길이는 100을 넘지 않습니다.
• 2차원 배열 격자판의 크기는 100*100입니다.


작성한 코드

def solution(moves):
    
    dr = [-1, 0, 1, 0]
    dc = [0, 1, 0, -1]
    
    dic = {'R' : 1, 'L' : 3}
    r = c = 0

    # 초기 값 오른쪽
    d = 1

    for move in moves:
        if move == 'G':
            r += dr[d]
            c += dc[d]
        else:
            d = (d+dic[move]) % 4

    return [r, c]
                      
print(solution('GGGRGGG'))
print(solution('GGRGGG'))
print(solution('GGGGGGGRGGGRGGRGGGLGGG'))
print(solution('GGLLLGLGGG'))

풀이

이 문제는 청소 로봇(ver 1)와 비슷하지만 격자판 밖으로 나갔을 시 무시하는 부분이 추가된 거다.

  1. 방향 배열 dr, dc12시부터 시계방향으로 설정
  2. dic에 명령어들과 dr, dc의 인덱스를 매칭시켜 사전형으로 선언
  3. r, c에 로봇의 초기 위치인 0으로 설정
  4. d에 로봇의 초기 시점인 오른쪽(1)로 설정
  5. 명령(move)G라면 현재 시점 d방향으로 한 칸 이동
  6. 명령(move)R이나 L이라면 dic에서 맞는 인덱스 더해 시점 변경
    • d = (d+dic[move]) % 4를 한 이유 : d >= 4일때 정상적인 방향으로 움직이기 위해 dr, dc 인덱스인 0~3에 맞춤
  7. 입력된 명령 moves을 다 실행하면 return [r, c]
profile
끄적끄적

0개의 댓글