Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

서클 C++에 묶인 로봇

<시간/>

무한 평면이 있다고 가정하고 로봇은 처음에 위치 (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