문제 링크:
입력1:
5
9 20 28 18 11
30 1 21 17 28
입력2:
6
46 33 33 22 31 50
27 56 19 14 14 10
출력1:
#####
# # #
### #
# ##
#####
출력2:
######
### #
## ##
####
#####
### #
코드1:
#include <iostream>
#include <string>
using namespace std;
int n;
int arr1[16], arr2[16];
bool map1[16][16], map2[16][16];
void dec_to_bin(int arr[], bool map[][16]) {
for (int i = 0; i < n; ++i) {
int j = n - 1;
for (int b = arr[i]; b; b = b >> 1) {
map[i][j--] = b % 2;
}
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 0; i < n; ++i)
cin >> arr1[i];
for (int i = 0; i < n; ++i)
cin >> arr2[i];
dec_to_bin(arr1, map1);
dec_to_bin(arr2, map2);
string ans;
for (int i = 0; i < n; ++i) {
ans.clear();
for (int j = 0; j < n; ++j) {
ans += (map1[i][j] || map2[i][j]) ? '#' : ' ';
}
cout << ans << '\n';
}
return 0;
}
비트연산을 물어보는 문제라고 한다.
이진법으로 전환할 필요가 없었다...
코드2:
#include <iostream>
#include <string>
using namespace std;
int n;
int arr1[16], arr2[16];
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 0; i < n; ++i)
cin >> arr1[i];
for (int i = 0; i < n; ++i)
cin >> arr2[i];
string ans;
for (int i = 0; i < n; ++i) {
ans.clear();
int res = arr1[i] | arr2[i];
for (int j = 1 << n - 1; j; j = j >> 1) {
ans += (res & j) ? '#' : ' ';
}
cout << ans << '\n';
}
return 0;
}