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

C++에서 주어진 문자열에서 방향 찾기

<시간/>

L과 R만 포함하는 문자열이 있다고 가정하고 이것은 각각 왼쪽 회전과 오른쪽 회전을 나타내며 피벗의 최종 방향을 찾아야 합니다. 여기서 방향은 북쪽(N), 동쪽(E), 남쪽(S), 서쪽(W)입니다. 나침반에서 중심축이 북쪽(N)을 가리키고 있다고 가정합니다.

따라서 입력이 "RRRLRLR"과 같으면 초기 방향이 N이므로 출력은 E가 될 것입니다. RR은 S를 가리키고 LR은 동일한 N을 다시 가리키고 LL은 이전 위치 N을 가리킬 것입니다. R은 E를 가리킬 것입니다. 따라서 E가 마지막입니다.

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

  • 개수 :=0

  • 방향 :=빈 문자열

  • initialize i :=0의 경우, i − 길이 s일 때 업데이트(i 1만큼 증가), −

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

      • (1씩 감소)

    • 그렇지 않으면

      • (1씩 증가)

  • 개수> 0이면 -

    • 카운트 모드 4가 0과 같으면 -

      • 방향 :="N"

    • 그렇지 않으면 카운트 모드 4가 1과 같을 때 -

      • 방향 :="E"

    • 그렇지 않으면 카운트 모드 4가 2와 같을 때 -

      • 방향 :="S"

    • 그렇지 않으면 카운트 모드 4가 3과 같을 때 -

      • 방향 :="W"

  • count <0이면 -

    • 카운트 모드 4가 0과 같으면 -

      • 방향 :="N"

    • 그렇지 않으면 카운트 모드 4가 -1과 같을 때 -

      • 방향 :="W"

    • 그렇지 않으면 카운트 모드 4가 -2와 같을 때 -

      • 방향 :="S"

    • 그렇지 않으면 계수 모드 4가 -3과 같을 때 -

      • 방향 :="E"

  • 반환 방향

예시

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

#include<bits/stdc++.h>
using namespace std;
string get_dir(string s) {
   int count = 0;
   string direction = "";
   for (int i = 0; i < s.length(); i++){
      if (s[0] == '\n')
         return NULL;
      if (s[i] == 'L')
         count--;
      else
         count++;
   }
   if (count > 0){
      if (count % 4 == 0)
         direction = "N";
      else if (count % 4 == 1)
         direction = "E";
      else if (count % 4 == 2)
         direction = "S";
      else if (count % 4 == 3)
         direction = "W";
   }
   if (count < 0){
      if (count % 4 == 0)
         direction = "N";
      else if (count % 4 == -1)
         direction = "W";
      else if (count % 4 == -2)
         direction = "S";
      else if (count % 4 == -3)
         direction = "E";
   }
   return direction;
}
int main() {
   string s = "RRLRLLR";
   cout << (get_dir(s));
}

입력

"RRLRLLR"

출력

E