- [ 문제 ]
- My Code
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
string binary1 = "";
string binary2 = "";
string sum = "";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (arr1[i] % 2 == 0)
{
binary1.push_back(' ');
arr1[i] /= 2;
}
else
{
binary1.push_back('#');
arr1[i] /= 2;
}
if (arr2[i] % 2 == 0)
{
binary2.push_back(' ');
arr2[i] /= 2;
}
else
{
binary2.push_back('#');
arr2[i] /= 2;
}
}
for (int j = n - 1; j >= 0; j--)
{
if (binary1[j] == '#' || binary2[j] == '#')
sum.push_back('#');
else
sum.push_back(' ');
}
answer.push_back(sum);
sum.clear();
binary1.clear();
binary2.clear();
}
return answer;
}
- Best Code
#include <string>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
for(int i=0; i <n; i++){
arr1[i] = arr1[i]|arr2[i];
string ans = "";
for(int j = 0; j<n; j++){
if(arr1[i] % 2 == 0) ans = " " + ans;
else ans = "#" + ans;
arr1[i] = arr1[i] >> 1;
}
answer.push_back(ans);
}
return answer;
}
" 비트 연산자를 사용할 생각을 하였는가 !! "
- CheckPoint
- 나는 2개의 숫자 배열에 대한 각각의 " "(0) , "#"(1) 로 전환된 이진수 문자열 배열을 만들기 위해서 따로 문자열 변수를 선언 후
- N 번 진행하면서 매번 만들어진 두 문자열끼리 원소를 조건문을 통해서 연산을 통해 answer 문자열 벡터에 연산을 통해 만들어진 이진수문자열을 삽입하고 마지막 answer 문자열 벡터를 반환하는 식으로 작성했다.
- 문제는 이렇게 풀어보니, 정수를 이진수를 의미하는 ' ', '#' 문자열로 만드는 과정에서 push_back 함수 가지고서만 해결하다보니 문자열이 뒤집어 지는 것도 생각을 해줘야해서 마지막에 두 이진수 문자열 간에 연산할 때
두 문자열을 문자열 마지막부터 앞으로 후진하면서 문자간 연산한 것을
정답 문자열 벡터에 넣어줘야했다.
( 이는 이진수를 -> 십진수로 전환하는데에는 내가 얻어낸 문자열이랑은 연산이 반대이니깐! )- 끝내 결론은 무엇인가 ! 바로 "비트연산자" 를 생각해봐야 한다.
- [ 비트연산자 ]
= 정수나 문자 등을 2진수로 변환한 후에 각 자리의 비트끼리 연산을 수행한다.