[PCCP] 시뮬레이션 - 청소 로봇(ver 1) | 파이썬

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

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


앞서 공부한 시뮬레이션 알고리즘을 사용해 청소 로봇(ver 1) 문제를 풀어보겠다.

청소 로봇(ver 1)


문제

이차원 배열 격자판 0행 0열이 청소 로봇의 시작위치입니다.

청소 로봇은 다음 규칙에 따라 이동합니다.
1. 'U' 명령은 로봇이 위쪽으로 한 칸 이동합니다.
2. 'R' 명령은 로봇이 오른쪽으로 한 칸 이동합니다.
3. 'L' 명령은 로봇이 왼쪽으로 한 칸 이동합니다.
4. 'D' 명령은 로봇이 아래쪽으로 한 칸 이동합니다.

매개변수 moves에 청소 로봇에 명령을 내린 문자들이 차례대로 나열된 명령 문자열이 주어지 면 이 명령 문자열을 청소 로봇이 모두 수행했을 때 최종 위치를 반환하는 프로그램을 작성하 세요. 격자판 밖으로 벗어나는 명령은 주어지지 않습니다.


입출력 예

입력(moves)출력(answer)
'RRRDDDLU'[2, 2]
'DDDRRRDDLL'[5, 1]
'RRRRRRDDDDDDUULLL'[4, 3]
'RRRRDDDRRDDLLUU'[3, 4]

제한사항

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

작성한 코드

def solution(moves):
    dr = [-1, 0, 1, 0]
    dc = [0, 1, 0, -1]

    # 로봇 초기 위치
    loc = [0, 0]

    for move in moves:
        # 위쪽
        if move == "U":
            loc = [(loc[0] + dr[0]), (loc[1] + dc[0])]
        # 오른쪽
        elif move == "R":
            loc = [(loc[0] + dr[1]), (loc[1] + dc[1])]
        # 왼쪽
        elif move == "L":
            loc = [(loc[0] + dr[3]), (loc[1] + dc[3])]
        # 아래쪽
        else:
            loc = [(loc[0] + dr[2]), (loc[1] + dc[2])]

    return loc
                            
print(solution('RRRDDDLU'))
print(solution('DDDRRRDDLL'))
print(solution('RRRRRRDDDDDDUULLL'))
print(solution('RRRRDDDRRDDLLUU'))

풀이

  1. 방향 배열 dr, dc12시부터 시계방향으로 설정
  2. loc에 로봇의 초기 위치인 [0, 0]으로 설정
  3. moves에 입력되어있는 명령들을 하나씩, 방향 배열 dr, dc를 이용해 locmove에 따라 한 칸 이동
  4. 입력된 명령 moves을 다 실행하면 return loc
profile
끄적끄적

0개의 댓글