이진수가 주어진 문제에 대해 토론하십시오. 나머지 숫자가 다른 모든 옵션의 최대값이 되도록 약간 제거해야 합니다. 예를 들면
Input : N = 1011 Output: 111 Explanation: We need to remove one bit so removing 0 bit will give a maximum number than removing any 1’s bit. 111 > 101, 011. Input: 111 Output: 11 Explanation: Since all the bits are 1 so we can remove any bit.
해결책을 찾기 위한 접근 방식
무차별 대입 방식
무차별 대입을 적용하면 최대 결과 값이 제공됩니다. 즉, 각 비트를 하나씩 제거하고 다른 결과를 비교하여 최대 결과를 얻습니다.
그러나 하나의 효율적인 접근 방식이 있습니다. 즉, 최소 중복 비트를 제거하는 경우 사용할 수 있습니다.
효율적인 접근
효율적인 접근 방식은 결과 수치에 최소한의 영향을 미칩니다.
-
먼저 오른쪽에서 비트를 통과합니다.
-
0을 검색하고 첫 번째 카운터에서 제거하십시오.
-
0이 없으면 비트를 제거합니다.
예시
효율적인 접근을 위한 C++ 코드
#include <bits/stdc++.h> using namespace std; int main(){ string str = "1011"; bool flag = false; int n = str.length(); // Initialising new array for char res[n - 1]; int j = 0; // traversing through the binary number from right. for (int i = 0; j < n - 1; i++) { // if 0 is found then skip it. if (str[i] == '0' && flag == false) { flag = true; continue; } else res[j++] = str[i]; } // printing the resulting string. cout << "Maximum number: " << res; return 0; }
출력
Maximum number: 111
위 코드 설명
-
하나의 0만 제거되도록 플래그 변수를 사용합니다.
-
결과 숫자를 저장하기 위해 문자 배열 res가 초기화됩니다.
-
루프는 원래 숫자보다 하나 적은 요소를 저장해야 하기 때문에 n-1까지 실행됩니다.
결론
이 튜토리얼에서 우리는 1비트를 제거한 후 최대 수를 찾는 것에 대해 논의했습니다. 우리는 이 문제를 해결하기 위해 두 가지 접근 방식을 논의했습니다.
우리는 또한 C, Java, Python 등과 같은 다른 언어로 작성할 수 있는 동일한 C++ 코드를 작성합니다. 이 튜토리얼이 도움이 되기를 바랍니다.