작업은 숫자 A의 일부를 다른 숫자 B에 있는 숫자로 대체하여 숫자 A의 가치를 최대화하는 것입니다. A의 값을 최대화할 수 없는 경우 숫자는 대체되지 않습니다.
참고 - B의 숫자는 한 번만 사용할 수 있습니다.
이제 예제를 사용하여 무엇을 해야 하는지 이해합시다 -
입력
A = “1221” B = “1211”
출력
Maximum value of A possible 2221
설명 − 여기에서 B에서 2를 선택하고 A의 첫 번째 1로 바꿉니다. 여기에서는 A의 다른 숫자를 2 또는 1로 바꿔도 값이 증가하지 않으므로 여기에서 유일한 선택입니다.
입력
A = “1002” B = “3200”
출력
Maximum value of A possible 3202
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.
-
A의 각 숫자는 B의 숫자보다 작으면 B의 숫자로 대체됩니다.
-
문자열 B를 오름차순으로 정렬합니다.
-
왼쪽에서 A 횡단을 시작합니다.
-
이제 오른쪽에서 B를 횡단합니다.
-
A의 숫자가 더 작으면 B의 숫자로 바꾸고 A에서 포인터를 증가시키고 B에서 포인터를 감소시킵니다.
예
#include <bits/stdc++.h> using namespace std; // Function to return the maximized value of a string valueup(string str1, string str2){ // Sort digits in ascending order sort(str2.begin(), str2.end()); int len1 = str1.length(); int len2 = str2.length(); int j = len2 - 1; for (int i = 0; i < len1; i++) { // If all the digits of b consumed if (j < 0) break; if (str2[j] > str1[i]) { str1[i] = str2[j]; j--; //once digit used } } return str1; } // Driver code int main(){ string a = "1204"; string b = "4521"; cout << valueup(a, b); return 0; }
출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 -
5424