프로그래머스(Programmers)

프로그래머스 비밀지도 C++

cosmohoo 2022. 3. 13. 11:46
반응형

문제 설명 

 

=> 단순구현문제였습니다. 

=> 10진수로 주어진 숫자를 2진수 숫자로 변환하여 string형 vector 변수로 표현하여야 합니다. 

string Binary(int num , int digit) // 십진수, 자릿수
{
    string s = bitset<16>(num).to_string();  //< > 안에 있는 숫자는 몇자리까지 표현할지를 정한다.
    string value = s.substr(16-digit);  // substr을 통해 필요한 숫자만큼만 쓴다. 
    return value; 
}

=> 위는 10진수를 2진수로 표현하는 방법입니다. 필요한 자릿수만큼 사용하기 위해 substr 함수를 이용하였습니다. 

=> 두 string형 vector map1 과 map2를 비교하여 둘중에 하나라도 벽이 있으면 '#'을 넣어주고, 아닐 경우  ' '을 넣어주어야 합니다. 

 

#include <string>
#include <vector>
#include <bitset>
#include <iostream>

using namespace std;

string Binary(int num , int digit) // 십진수, 자릿수
{
    string s = bitset<16>(num).to_string();
    string value = s.substr(16-digit);
    return value; 
}

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> finalMap;
    
    vector<string> map1; //첫번째 map 
    vector<string> map2; //두번째 map
    
    for(auto k : arr1)
    {
        string s = Binary(k, n);
        map1.push_back(s);
    }
    
    for(auto p : arr2)
    {
        string s = Binary(p, n);
        map2.push_back(s);
    }
    
    string fMapEle ="";//finalMap에 넣을 원소
   for(int i=0; i<n; i++)
   {   
       for(int j=0; j<n; j++)
       {
           if((map1[i][j] == '1') || (map2[i][j]=='1')) // 둘중에 하나라도 벽이 있으면 
               fMapEle.push_back('#');
           else fMapEle.push_back(' '); //둘다 벽이 없으면
       }
    finalMap.push_back(fMapEle);
    fMapEle =""; //원소초기화
   }
    
    return finalMap;
}

 

반응형