알고리즘

[프로그래머스] 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 < 자리수 크기 > (변환하려는 수)