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

C++에서 주어진 방향으로 이동한 후 시작 위치로 돌아갈 수 있는지 확인

<시간/>

우리가 위치 (0, 0)에 있다고 가정합니다. 우리는 4개의 문자를 사용하여 연속적인 방향을 나타내는 문자열이 있습니다. 주어진 방향을 모두 고려한 후 (0, 0) 위치로 돌아갈 수 있는지 확인해야 합니다. 기호는

  • 동쪽의 E
  • W는 서쪽
  • 북쪽은 N
  • 남쪽을 위한 S.

따라서 입력이 "EENWWS"와 같으면 출력이 true가 되고 동쪽으로 2칸 이동한 다음 북쪽으로 이동한 다음 서쪽으로 2칸 이동한 다음 다시 남쪽으로 이동하므로 이것이 시작 위치입니다.

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

  • l :=이동 배열의 크기
  • l이 0과 같으면 -
    • 참을 반환
  • lft :=0, 위로 :=0
  • 초기화 i의 경우:=0, i
  • 이동[i]이 'W'와 같으면 -
    • (lft를 1씩 증가)
  • 이동[i]이 'E'와 같으면 -
    • (lft를 1만큼 감소)
  • 이동[i]이 'N'과 같으면 -
    • (1씩 증가)
  • moves[i]가 'S'와 같은 경우:
    • (1씩 감소)
  • lft가 0과 같고 up이 0과 같으면 -
    • 참을 반환
  • 거짓 반환
  • 예시(C++)

    이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       bool solve(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] == 'W') {
                   lft++;
                }
                if (moves[i] == 'E') {
                   lft--;
                }
                if (moves[i] == 'N') {
                   up++;
                }
                if (moves[i] == 'S') {
                   up--;
                }
             }
             if (lft == 0 && up == 0) {
                return true;
             }
             return false;
          }
       };
    }
    main(){
       Solution ob;
       cout << (ob.solve("EENWWS"));
    }

    입력

    "EENWWS"

    출력

    1