이 문제에서는 2진 문자열의 크기가 n인 배열 bin[]이 제공됩니다. 우리의 임무는 n 이진 문자열의 비트 OR(&)을 찾는 프로그램을 만드는 것입니다.
여기에서는 모든 숫자를 가져와서 비트 AND를 찾습니다. 즉, bin[0] | bin[1] |... bin[n-2] | 빈[n]
문제를 이해하기 위해 예를 들어보겠습니다.
입력 -
bin[] = {“1001”, “11001”, “010101”}
출력 -
011101
설명 − 모든 이진 문자열의 비트 OR −
(1001) | (11001) | (010101) = 011101
이 문제를 해결하기 위해 비트 수가 가장 많은 문자열(최대 길이 문자열)을 찾습니다. 그런 다음 모든 문자열에 적절한 수의 선행 0을 추가합니다. 그런 다음 비트의 Bitwise OR을 찾습니다.
알고리즘의 작동을 보여주는 예를 들어 보겠습니다. -
bin[] = {“1101”, “011010” , “00111”}
최대 길이 문자열은 길이가 6인 011010입니다. 따라서 다른 문자열에 선행 0을 추가합니다.
업데이트된 문자열 - "001101", "011010", "000111".
모든 문자열의 BITWISE OR 찾기 - 001101 | 011010 | 000111 =011111
예시
솔루션의 작동을 설명하는 프로그램 −
#include <bits/stdc++.h> using namespace std; string bitwiseOR(string* bin, int n){ string result; int max_size = INT_MIN; for (int i = 0; i < n; i++) { max_size = max(max_size, (int)bin[i].size()); reverse(bin[i].begin(), bin[i].end()); } for (int i = 0; i < n; i++) { string s; for (int j = 0; j < max_size - bin[i].size(); j++) s += '0'; bin[i] = bin[i] + s; } for (int i = 0; i < max_size; i++) { int insertBit = 0; for (int j = 0; j < n; j++) insertBit = insertBit | (bin[j][i] - '0'); result += (insertBit + '0'); } reverse(result.begin(), result.end()); return result; } int main() { string bin[] = { "1101", "011010", "00111" }; int n = sizeof(bin) / sizeof(bin[0]); cout<<"The bitwise OR of all the binary String of the string array is "<<bitwiseOR(bin, n); return 0; }
출력
The bitwise OR of all the binary String of the string array is 011111