#이진수 #or연산 #and연산 #xor연산
더보기
방법 1. for문으로
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
string map_count[16];
int temp1 = 0, temp2 = 0;
for(int i = 0; i < n; i++){
temp1 = arr1[i];
while(arr1[i] > 0){
map_count[i] += to_string(arr1[i] % 2);
arr1[i] /= 2;
}
if(map_count[i].size() < n) map_count[i] += '0';
reverse(map_count[i].begin(), map_count[i].end());
answer.push_back(map_count[i]);
}
return answer;
}
방법 2. STL bitset 활용
#include <string>
#include <vector>
#include <bitset>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
int count = 0, sum = 0;
string arr1_temp = " ", arr2_temp = " ";
string check_arr = " ",arr = "", space = " ";
for(int i = 0; i < n; i++){
arr1_temp = bitset<16>(arr1[i]).to_string();
arr2_temp = bitset<16>(arr2[i]).to_string();
sum = stoi(arr1_temp) + stoi(arr2_temp);
check_arr = to_string(sum);
for(int j = 0; j < n; j++){
if(check_arr.size() == n){
if(check_arr[j] == '1' || check_arr[j] == '2') arr += '#';
else arr += " ";
}else{
++count;
if(count == 1) arr += " ";
if(check_arr[j] == '1' || check_arr[j] == '2') arr += '#';
else {
if(j != n - 1) arr += " ";
}
}
}
answer.push_back(arr);
count = 0;
arr = "";
}
return answer;
}
3차
#include <string>
#include <vector>
#include <bitset>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
int count = 0, sum = 0;
string arr1_temp = " ", arr2_temp = " ";
string check_arr = " ",arr = "", space = " ";
for(int i = 0; i < n; i++){
arr1_temp = bitset<16>(arr1[i]).to_string();
arr2_temp = bitset<16>(arr2[i]).to_string();
sum = stoi(arr1_temp) + stoi(arr2_temp);
check_arr = to_string(sum);
for(int j = 0; j < n; j++){
if(check_arr.size() == 1 && check_arr[j] == '1'){
for(int z = 0; z < n; z++){
arr += " ";
if(z == n - 1){
arr += '#';
break;
}
}
}else{
if(check_arr.size() == n){
if(check_arr[j] == '1' || check_arr[j] == '2') arr += '#';
else arr += " ";
}else{
++count;
if(count == 1){
for(int k = check_arr.size(); k < n; k++){
arr += " ";
}
}
if(check_arr[j] == '1' || check_arr[j] == '2') arr += '#';
else {
if(j != n - 1) {
arr += " ";
break;
}
}
}
}
}
answer.push_back(arr);
count = 0;
arr = "";
}
return answer;
}
4차
#include <string>
#include <vector>
#include <bitset>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
long long count, sum;
string arr1_temp = " ", arr2_temp = " ";
string check_arr = " ",arr = "", space_check = " ";
for(int i = 0; i < n; i++){
arr1_temp = bitset<16>(arr1[i]).to_string();
arr2_temp = bitset<16>(arr2[i]).to_string();
sum = stoi(arr1_temp) + stoi(arr2_temp);
check_arr = to_string(sum);
for(int j = 0; j < check_arr.size(); j++){
if(check_arr.size() == 1){
for(int k = 0; k < n; k++){
if(k == n - 1) arr += "#";
else arr += " ";
}
}else{
if(check_arr[j] == '1' || check_arr[j] == '2' ) arr += "#";
else arr += " ";
}
}
if(check_arr.size() == n) answer.push_back(arr);
else{
for(int z = arr.size(); z < n; z++){
space_check += " ";
}
space_check += arr;
answer.push_back(space_check);
}
arr = "";
space_check = "";
}
return answer;
}
> 비효율적인 듯 보여서 코드 갈아엎음
✍ 문제 해설
처음에 어렵게 접근해서 풀이가 오래걸렸습니다.
하나하나 이진수로 변환해주는 방법이나 bitset을 사용한 후 "#"과 " "으로 변환해보았으나 코드가 비효율적이었습니다.
다시 처음으로 돌아가 접근 방법부터 바꿨습니다.
어렵게 말고, 쉽게 접근해보자.
그 후, 비트 연산자를 적용하자 바로 풀렸습니다.
#include <stdio.h>
int main()
{
unsigned char num1 = 1; // 0000 0001
unsigned char num2 = 3; // 0000 0011
printf("%d\n", num1 & num2); // 0000 0001: 01과 11을 비트 AND하면 01이 됨
printf("%d\n", num1 | num2); // 0000 0011: 01과 11을 비트 OR하면 11이 됨
printf("%d\n", num1 ^ num2); // 0000 0010: 01과 11을 비트 XOR하면 10이 됨
return 0;
}
🌱 정답코드
reference
'OLD_알고리즘 > Programmers - 알고리즘' 카테고리의 다른 글
Programmers ] Level 2 - N개의 최소공배수 (0) | 2021.02.01 |
---|---|
Programmers ] 🔁Level 1 - 실패율 (0) | 2021.01.26 |
Programmers ] Level 1 - 예산 (0) | 2021.01.25 |
Programmers ] Level 1 - 완주하지 못한 선수 (0) | 2021.01.22 |
Programmers ] Level 1 - 체육복 (0) | 2021.01.19 |
댓글