>백엔드 개발 >C++ >합계를 최대화하기 위해 C++를 사용하여 주어진 조건에 따라 주어진 이진 문자열을 분할합니다.

합계를 최대화하기 위해 C++를 사용하여 주어진 조건에 따라 주어진 이진 문자열을 분할합니다.

PHPz
PHPz앞으로
2023-09-04 10:21:07976검색

합계를 최대화하기 위해 C++를 사용하여 주어진 조건에 따라 주어진 이진 문자열을 분할합니다.

이 문서의 목적은 개별 구성 요소에서 얻은 누적 합계를 최대화하는 방식으로 이진 문자열을 분할하는 것과 관련된 복잡한 알고리즘 문제를 해결하는 것입니다. 우리는 독자들에게 코드 구현을 위한 포괄적인 구문 개요를 제공하고 이 문제를 극복할 수 있는 두 가지 가능한 기술을 제안할 것입니다. 또한 위의 방법을 기반으로 실제 완전한 실행 코드 2개를 보여드리겠습니다.

문법

알고리즘을 자세히 살펴보기 전에 앞으로 나올 코드 예제를 통해 시연할 지정된 메서드의 구조를 숙지하는 것이 중요합니다. 이 방법은 이진 문자열을 입력으로 사용하고 미리 결정된 조건을 사용하여 해당 입력을 분할하여 가능한 가장 높은 값을 계산합니다. 이 접근 방식이 구문적으로 어떻게 보이는지는 다음과 같습니다. -

으아아아

알고리즘

이제 이진 문자열을 분할하여 합을 최대화하는 문제를 해결하는 단계적 알고리즘에 대해 논의해야 합니다.

코드 조각 1

  • 두 개의 변수 "maxSum"과 "currentSum"을 초기화합니다. 둘 다 0으로 설정됩니다.

  • 바이너리 문자열을 왼쪽에서 오른쪽으로 탐색합니다.

  • 문자열의 각 문자에 대해 -

    • 문자가 '0'이면 현재 하위 문자열에 추가합니다.

    • 문자가 '1'인 경우 −

      • 현재 "currentSum"을 추가하여 "maxSum"을 업데이트합니다.

      • `currentSum`을 0으로 재설정하세요.

  • 순회가 완료된 후 최종 "currentSum" 및 "maxSum"을 추가합니다.

  • `maxSum`을 결과로 반환합니다.

방법 1

이 문제를 해결하는 첫 번째 방법은 위의 알고리즘을 구현하는 것입니다. 해당 코드 조각을 살펴보겠습니다 -

으아아아

출력

으아아아

지침

  • 편의를 위해 코드에는 먼저 필요한 라이브러리("iostream" 및 "string")가 포함되고 "std" 네임스페이스가 사용됩니다.

  • 이진 문자열을 분할하여 얻을 수 있는 최대 합계를 계산하려면 이진 문자열을 입력으로 사용하고 출력을 반환하는 `maximizeSum` 함수를 사용할 수 있습니다.

  • 이 함수 내에서는 `maxSum`과 `currentSum`이라는 두 개의 변수가 초기화됩니다. 전자는 지금까지 도달한 최대값을 추적하는 반면, 후자는 각 개별 하위 문자열의 합계를 계산합니다.

  • 범위 기반 for 루프를 사용하여 입력 "binaryString"의 각 문자 "c"를 반복합니다.

  • 현재 문자 "c"가 "0"이면 10을 곱하고 "0" 값을 추가하여 "currentSum"을 업데이트합니다. 이는 현재 하위 문자열에 "0"을 효과적으로 추가합니다.

  • 현재 문자 "c"가 "1"이면 현재 하위 문자열이 끝나는 것을 의미합니다. 'maxSum'에 'currentSum'을 추가하여 지금까지 도달한 최대 합계를 업데이트한 다음 'currentSum'을 0으로 재설정하여 새 하위 문자열을 시작합니다.

  • 루프가 완료된 후 마지막 하위 문자열의 'currentSum'을 이전 'maxSum'에 추가하여 계산됩니다. `main` 함수는 사용자가 이진 문자열을 입력할 수 있는 프롬프트를 제공합니다.

  • "main" 함수는 사용자가 이진 문자열을 입력할 수 있는 프롬프트를 제공합니다.

  • 입력 문자열은 `maximizeSum` 함수에 전달되고 반환된 최대 합계는 `result` 변수에 저장됩니다.

  • 마지막으로 최대 합계가 사용자에게 표시됩니다.

방법 2

두 번째 접근 방식에서는 정수 곱셈을 수행할 필요성을 제거하여 코드를 최적화합니다. 대신 비트별 연산을 사용하여 현재 합계를 계산하겠습니다. 이 접근 방식의 코드 조각을 살펴보겠습니다. -

으아아아

출력

으아아아

지침

  • 첫 번째 방법과 유사하게 코드는 먼저 필요한 라이브러리를 포함하고 `std` 네임스페이스를 사용합니다.

  • `maximizeSum` 함수와 `main` 함수의 정의는 첫 번째 방법과 동일합니다.

  • `maximizeSum` 함수에서 왼쪽 비트 이동 연산자(`

  • 2를 곱하는 것과 같습니다. 그런 다음 현재 문자가 "0"이므로 `currentSum`에 0을 추가합니다.

  • 나머지 코드는 두 방법 모두 동일합니다. 입력으로 이진 문자열을 받습니다. 문자열을 분할할 때 가능한 최대 합계를 계산하려면 `maximizeSum` 함수를 사용하세요. 그러면 이 결과가 사용자에게 표시됩니다.

이러한 코드는 C++ 컴파일러에서 컴파일하고 실행할 수 있습니다. 바이너리 문자열이 입력되면 프로그램은 지정된 조건에 따라 문자열을 나누어 얻은 최대 합계를 출력합니다.

결론

이 글에서는 주어진 조건에 따라 이진 문자열을 분할하여 합을 최대화하는 문제를 탐구합니다. 코드 예제에서 사용한 방법의 구문을 제공하고 문제를 해결하는 두 가지 방법을 제안합니다. 처음에는 직접 산술이 사용되었지만 다음 기술은 비트 연산을 통해 인코딩을 최적화합니다. 두 방법 모두 문제를 성공적으로 해결했지만 후자는 정수 곱셈의 필요성을 제거하므로 더 큰 효율성을 제공합니다. 이러한 알고리즘을 이해하고 구현하면 이진 문자열을 분할하여 합계를 최대화하는 것과 관련된 유사한 문제를 효율적으로 해결할 수 있습니다.

위 내용은 합계를 최대화하기 위해 C++를 사용하여 주어진 조건에 따라 주어진 이진 문자열을 분할합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제