점 (0, 0)에서 시작하는 무한 그리드에 로봇이 있다고 가정합니다. 북향을 향하고 있습니다. 이제 로봇은 세 가지 가능한 명령 유형 중 하나를 받을 수 있습니다.
- -2:좌회전 90도
- -1:우회전 90도
- x 단위 앞으로 이동하려면 1에서 9 사이의 값
- 장애물이 되는 격자 사각형이 있습니다.
우리는 또한 장애물이라는 또 다른 배열을 가지고 있습니다. 이것은 i번째 장애물이 그리드 포인트에 있음을 나타냅니다(장애물[i][0], 장애물[i][1]). 로봇이 장애물 위로 이동하려는 경우 로봇은 계속 켜져 있습니다. 대신 이전 그리드 사각형을 사용합니다.
로봇이 원점에서 이동할 최대 유클리드 거리의 제곱을 찾아야 합니다.
따라서 입력이 명령 =[4,-1,4,-2,4], 장애물 =[[2,4]]인 경우 로봇이 (1, 4)에서 멈추기 때문에 출력은 65가 됩니다. ) 좌회전하여 (1, 8)로 이동하기 전에.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 위치 오프셋 :=[(0, 1) ,(1, 0) ,(0, -1) ,(-1, 0) ]
- x, y, 방향, max_distance를 0으로 초기화
- 명령의 각 명령에 대해 다음을 수행합니다.
- 명령이 -2와 같으면
- 방향 :=(방향 - 1) 모드 4
- 그렇지 않으면 명령이 -1과 같을 때
- 방향 :=(방향 + 1) 모드 4
- 그렇지 않으면
- (x_off, y_off) :=position_offset[방향]
- 명령이 0이 아닌 동안 do
- 만약 (x + x_off, y + y_off)가 장애물에 없으면
- x :=x + x_off
- y :=y + y_off
- 명령어 :=명령 - 1
- 만약 (x + x_off, y + y_off)가 장애물에 없으면
- max_distance =max_distance의 최대값, x^2 + y^2
- 명령이 -2와 같으면
- 최대 거리 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class 솔루션:def robotSim(self, 명령, 장애물):position_offset =[(0, 1), (1, 0), (0, -1), (-1, 0)] 장애물 =set(map (튜플, 장애물)) x, y, 방향, max_distance =0, 0, 0, 0 명령의 명령:if 명령 ==-2:방향 =(방향 - 1) % 4 elif 명령 ==-1:방향 =(방향 + 1) % 4 else:x_off, y_off =position_offset[방향] 동안 명령:if (x + x_off, y + y_off) 장애물에 있지 않음:x +=x_off y +=y_off 명령 -=1 max_distance =최대 (max_distance, x**2 + y**2) return max_distanceob =Solution()print(ob.robotSim([4,-1,4,-2,4],[[2,4]]))사전>입력
[4,-1,4,-2,4],[[2,4]]출력
65