Deff_Dev

[프로그래머스] 비밀지도 (C++) 본문

코딩테스트/프로그래머스

[프로그래머스] 비밀지도 (C++)

Deff_a 2024. 11. 12. 21:43

문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

이 문제는 주어진 각 벡터의 숫자들을 2진수로 만든 뒤, 각 자리를 비교하여 1이 하나라도 있으면 '#' 둘 다 0이라면 '  '를 넣는 문제다.

#include <string>
#include <vector>

using namespace std;

int idx;

int GetMatchNum (int count){
    int n = 1;
    for(int i = 0;i  < count; i ++){
        n *= 2;
    }
    return n;
}

string GetBinary(int num){
    string str = "";
    
    for(int i = idx - 1; i >= 0; i--){
        int match = GetMatchNum(i);
        if(num >= match){
            str += '1';
            num -= match;
        }
        else{
            str += '0';
        }
    }
    
    return str;
}

void SetMaps(vector<string> &map, vector<int> arr){
    for(int i = 0; i < arr.size(); i++){
        string lock = GetBinary(arr[i]);
        map.push_back(lock);
    }
}
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    idx = n;
    
    vector<string> answer;
    vector<string> map01;
    vector<string> map02;

    SetMaps(map01, arr1);
    SetMaps(map02, arr2);
    
    for(int i = 0; i < n; i++){
        string str = "";
        for(int j = 0; j < n; j++){
            if(map01[i][j] == '1' ||map02[i][j] == '1') str += '#';
            else str += ' ';
        }
        answer.push_back(str);
    }
    
    return answer;
}