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

[시물레이션] -청소로봇 2

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

청소 로봇(ver 2)

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

 

 

청소 로봇은 다음 규칙에 따라 이동합니다.

1. 'U' 명령은 로봇이 위쪽으로 한 칸 이동합니다.
2. 'R' 명령은 로봇이 오른쪽으로 한 칸 이동합니다.
3. 'L' 명령은 로봇이 왼쪽으로 한 칸 이동합니다.
4. 'D' 명령은 로봇이 아래쪽으로 한 칸 이동합니다.
5. 만약 로봇이 명령을 수행할 경우 격자판 밖으로 나가는 경우라면 로봇은 해당 명령을 수행 하지 않고 무시합니다.
매개변수 n에 격자판 크기가 주어지고, moves에 청소 로봇에 명령을 내린 문자들이 차례대로 나열된 명령 문자열이 주어지면 청소 로봇이 최종적으로 멈춘 위치를 반환하는 프로그램을 작 성하세요.

 

제한사항:
• moves의 길이는 100을 넘지 않습니다. • 3 <= n <= 50

 

나의 코드 

def solution(n, moves): 
    x = y = 0
    dx=[-1,0,1,0]
    dy=[0,1,0,-1]
    dir=['U','R','D','L']

    for z in moves:
        for k in range(4):
            if z==dir[k]:
                nx=x+dx[k]
                ny=y+dy[k]
                if 0<=nx<n and 0<=ny<n:
                    x=nx
                    y=ny
 
    return [x, y]    
                
                      
print(solution(5, 'RRRDDDUUUUUUL'))
print(solution(7, 'DDDRRRDDLL'))
print(solution(5, 'RRRRRDDDDDU'))
print(solution(6, 'RRRRDDDRRDDLLUU'))

이전 문제에서 제한된 N 크기와 그 크기를 벗어나는 명령일 경우 제자리에 있는다는 조건이 추가 되었다.

그래서 0<=nx<n and 0<=ny<n:  조건을 넣어 해당 경우에만 로봇이 이동하도록 하였다.

 

 

정답 코드

def solution(n, moves):
    dx = [-1, 0, 1, 0]
    dy = [0, 1, 0, -1]
    dir = ['U', 'R', 'D', 'L']
    x = y = 0
    for c in moves:
        for k in range(4):
            if c == dir[k]:
                nx = x + dx[k]
                ny = y + dy[k]

        if nx < 0 or nx >= n or ny < 0 or ny >= n:
            continue

        x = nx
        y = ny
 
    return [x, y]    
                
                      
print(solution(5, 'RRRDDDUUUUUUL'))
print(solution(7, 'DDDRRRDDLL'))
print(solution(5, 'RRRRRDDDDDU'))
print(solution(6, 'RRRRDDDRRDDLLUU'))

정답 코드에는 나와 반대로 규격을 넘어가면 contine를 하였고 아닌경우 로봇의 이동 위치를 저장하였다.

흠..난 나의 코드가 더 가독성과 이해가 좋은것 같다..!