Letcode 9월 17일

1851 단어
문제.

On an infinite plane, a robot initially stands at (0, 0) and faces north. The robot can receive one of three instructions:


"G": 1 단위로 직진하기;
"L": 왼쪽으로 90도 돌기;
"R": 오른쪽으로 90도 회전합니다.
로봇은 주어진 지령을 순서대로 집행하고 이 지령들을 영원히 반복한다.
평면에 원 하나만 존재하면 로봇이 이 원을 영원히 떠나지 않을 때true로 돌아간다.
예 =
"""
입력: "LGLGG"
출력:트루
설명:
로봇은 (0,0)에서 (0,2)로 이동해 180도 회전한 다음 (0,0)로 돌아간다.
이 지령을 반복할 때 로봇은 원점을 중심으로 하는 반경이 2인 원 안에 유지된다.
"""
솔루션 -
class Solution:
    def isRobotBounded(self, instructions: str) -> bool:
        state_transitions = {
            'jl': '-i',
            '-jl': 'i',
            'il': 'j',
            '-il': '-j',
            'jr': 'i',
            '-jr': '-i',
            'ir': '-j',
            '-ir': 'j'
        }
        curr_dir = 'j'
        start = (0, 0)
        for ins in instructions:
            if ins == 'G':
                if curr_dir == 'j':
                    start = (start[0], start[1] + 1 )
                if curr_dir == '-j':
                    start = (start[0], start[1] - 1 )
                if curr_dir == 'i':
                    start = (start[0] + 1, start[1] )
                if curr_dir == '-i':
                    start = (start[0] - 1, start[1] )
            if ins == 'L':
                curr_dir = state_transitions[curr_dir+'l']
            if ins == 'R':
                curr_dir = state_transitions[curr_dir+'r']
        if start == (0, 0):
            return True
        else:
            if curr_dir != 'j':
                return True
        return False

좋은 웹페이지 즐겨찾기