무한 평면이 있다고 가정하고 로봇은 처음에 위치 (0, 0)에 서서 북쪽을 향하고 있습니다. 로봇은 세 가지 명령 중 하나를 받을 수 있습니다. -
-
G - 1단위 직진;
-
L - 왼쪽 방향으로 90도 회전,
-
R - 오른쪽 방향으로 90도 회전합니다.
로봇은 주어진 명령을 순서대로 수행하고 명령은 영원히 반복됩니다. 로봇이 원을 떠나지 않도록 평면에 원이 존재하는지 확인해야 합니다. 따라서 입력이 [GGLLGG]와 같으면 대답은 true가 됩니다. (0,0)에서 (0,2)까지 계속 반복되므로 이것은 닫힌 경로이며 답은 참입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
배열 dir 만들기 :=[[0,1], [1,0], [0,-1], [-1,0]]
-
쌍을 임시로 만들고 처음에는 (0, 0) 및 k :=0
-
범위 0에서 s 크기의 i에 대해
-
s[i]가 G이면
-
임시 :=(dir[k, 0], dir[k, 1])
-
-
그렇지 않으면 s[i]가 L일 때 k :=(k + 1) mod 4, 그렇지 않으면 k :=(k - 1) mod 4
-
-
temp가 (0, 0)이 아니고 k> 0일 때 거짓이면, 그렇지 않으면 참
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; class Solution { public: bool isRobotBounded(string s) { pair <int, int> temp({0,0}); int k = 0; for(int i = 0; i < s.size(); i++){ if(s[i] == 'G'){ temp.first += dir[k][0]; temp.second += dir[k][1]; }else if(s[i] == 'L'){ k = (k + 1) % 4; }else{ k = ((k - 1) + 4) % 4; } } return temp.first == 0 && temp.second == 0 || k > 0; } }; main(){ Solution ob; cout << (ob.isRobotBounded("GGLLGG")); }
입력
"GGLLGG"
출력
1