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

C++에서 로봇의 원점 복귀


로봇이 있고 시작 위치가 (0, 0)이라고 가정합니다. 일련의 이동이 있는 경우 이 로봇이 이동을 완료한 후 (0, 0)에서 끝나는지 확인해야 합니다.

이동 순서는 문자열로 제공되며 문자 move[i]는 i번째 이동을 나타냅니다. 기호는 오른쪽은 R, 왼쪽은 L, 위쪽은 U, 아래쪽은 D입니다. 로봇이 모든 이동을 마친 후 원점으로 돌아오면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

따라서 입력이 "RRULLD"와 같으면 출력이 true가 됩니다. 오른쪽 2단위, 위로 올라가고, 왼쪽 2단위, 다시 아래로, 이것이 시작 위치입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • l :=이동 배열의 크기

  • l이 0과 같으면 -

    • true를 반환

  • lft :=0, 위로 :=0

  • initialize i :=0의 경우, i

    • move[i]가 'L'과 같으면 -

      • (lft를 1씩 증가)

    • move[i]가 'R'과 같으면 -

      • (lft를 1씩 감소)

    • move[i]가 'U'와 같으면 -

      • (1씩 증가)

    • move[i]가 'D'와 같으면 -

      • (1씩 감소)

  • lft가 0과 같고 up이 0과 같으면 -

    • true를 반환

  • 거짓 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool judgeCircle(string moves) {
      int l = moves.length();
      if (l == 0) {
         return true;
      }
      int lft = 0, up = 0;
      for (int i = 0; i < l; i++) {
         if (moves[i] == 'L') {
            lft++;
         }
         if (moves[i] == 'R') {
            lft--;
         }
         if (moves[i] == 'U') {
            up++;
         }
         if (moves[i] == 'D') {
            up--;
         }
      }
      if (lft == 0 && up == 0) {
         return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.judgeCircle("RRULLD"));
}

입력

"RRULLD"

출력

1