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

C++의 원점에서 가장 멀리


각 문자가 "L", "R" 또는 "?"인 문자열 s가 있다고 가정합니다. "L"은 왼쪽으로 한 단위 이동, "R"은 오른쪽으로 한 단위 이동, "?" "L" 또는 "R"을 의미합니다. 위치 0에 있는 경우 "?"를 대체하여 0에서 가능한 최대 거리를 찾아야 합니다. "L" 또는 "R"로.

따라서 입력이 "LLRRL??"과 같으면 출력은 3이 되고 ? L을 사용하여 왼쪽으로 5단위, 오른쪽으로 2단위 이동하므로 최대 변위는 3입니다.

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

  • 연산 :=0, l :=0, r :=0

  • 각각에 대해 s −

    • 'L'과 같으면 -

      • (l 1씩 증가)

    • 그렇지 않으면 'R'과 같을 때 -

      • (r을 1씩 증가)

    • 그렇지 않으면

      • (1만큼 연산 증가)

  • (l 및 r)의 ​​최대값 반환 - (l 및 r)의 ​​최소값 + op

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(string s) {
      int op = 0;
      int l = 0;
      int r = 0;
      for (auto &it : s) {
         if (it == 'L') {
            l++;
         } else if (it == 'R') {
            r++;
         } else {
            op++;
         }
      }
      return max(l, r) - min(l, r) + op;
   }
};
main() {
   Solution ob;
   cout << (ob.solve("LLRRL??"));
}

입력

"LLRRL??"

출력

3