✅ LV.1
📌 2018 KAKAO BLIND RECRUITMENT 1차
✏️ 솔루션
arr
에 저장된 값을 비트화할 때는 bitset
사용
arr1
과 arr2
비트화 이후 두 개 모두 1
일 때만 최종 s
에 #
처리하고 나머지는 공백 처리
n
번 반복하는데 한바퀴 돌 때마다 answer
에 추가
✏️ 최종 코드
#include <string>
#include <vector>
#include <bitset>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
for(int i=0;i<n;i++) {
bitset<16> b1(arr1[i]);
bitset<16> b2(arr2[i]);
string str1=b1.to_string();
string str2=b2.to_string();
string s="";
for(int j=16-n;j<16;j++) {
if(str1[j]=='1'||str2[j]=='1') s+="#";
else s+=" ";
}
answer.push_back(s);
}
return answer;
}
✏️ 아쉬운 부분
- 최종 코드는 변수 선언이 너무 많아서 비효율적이라는 판단
- 비트연산을 사용해야하는데
for
문으로 밀어버림
- 이중
for
문 사용하는 것도 그렇고 bitset
사용하면서 자릿수를 16
으로 고정하면서 메모리 낭비하는 느낌
- 형변환 남발
✏️ 개선 솔루션
arr1
에 arr1
과 arr2
의 비트연산 결과 저장 ➡️ int
형에서 곧바로 비트연산 가능
- 각 자리가
0
인지 1
인지 체크할 때, for
문 사용하는 것이 아니라 비트연산자 >>
shift 사용
🔗 [C++] 비트연산
✏️ 개선 코드
#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;
}