알고리즘
[프로그래머스] level 1 - 비밀지도
u0jin
2020. 5. 8. 17:30
#include <string>
#include <vector>
#include <bitset>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
string tmp1;
string tmp2 ="";
for(int i=0;i<arr1.size();i++){
tmp1 = ( bitset<16>(arr1[i]) | bitset<16>(arr2[i]) ).to_string();
for(int j=16-n;j<16;j++){
if(tmp1[j] == '1'){
tmp2 += "#";
}
else{
tmp2 += " ";
}
}
answer.push_back(tmp2);
tmp2 = "";
}
return answer;
}
알고리즘)
문제가 0과 1로 구성되어 bitset 을 사용해야 한다고 생각함
1. OR 로 arr1 과 arr2 를 묶어줌
=> 원하는 값을 뽑아낼수 있다고 판단, to_string()으로 저장해야 다루기 쉬움
2. 16-n 부터 비교하도록 만듬
=> 16의 크기로 정의했기때문에 16-n부터 16까지 비교하도록 함
3. 만약 OR로 연산한 값이 1이라면 #으로 , 0이면 공백으로 저장함
=> tmp2 라는 string 변수를 정의하고 그값 뒤로 이어붙임
4. 저장된 값 tmp2를 answer안에 저장함
5. tmp2를 초기화 시킴
=> 그 다음 배열을 저장하기 위해 꼭 필요한 조건임
< bitset >
bitset을 정의할때 크기를 받아서 정의할수 없음.
여러 방법을 찾아봤으나, 처음부터 큰숫자로 정의후 계산할때 조정하는것이 제일 편함
bitset 정의)
bitset < 자리수 크기 > (변환하려는 수)