https://programmers.co.kr/learn/courses/30/lessons/17681

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
	vector<string> answer;
	for (int i = 0; i < n; i++) {
		string sharp;
		sharp.reserve(n);
		while (arr1[i] > 0 || arr2[i] > 0)
		{
			int sharp1 = arr1[i] % 2;
			int sharp2 = arr2[i] % 2;
			arr1[i] /= 2;
			arr2[i] /= 2;
			if (sharp1 == 1 || sharp2 == 1) {
				sharp.push_back('#');
			}
			else
				sharp.push_back(' ');
		}
		while (sharp.size() != n)
		{
			sharp.push_back(' ');
		}	
		reverse(sharp.begin(), sharp.end());
		answer.emplace_back(sharp);
	}

	return answer;
}

이 방법 말고는 비트 연산이 있겠다.