코딩테스트/프로그래머스
[프로그래머스] 비밀지도 (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;
}