- [ 문제 ]
- 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진수로 변환한 후에 각 자리의 비트끼리 연산을 수행한다.![]()
728x90
반응형