Algorithm/Programmers
[Programmers - c++] 비밀지도
tjddneva
2022. 2. 13. 21:20
https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
bitset 이라는 라이브러리를 써보았다. 풀고나서 다른 사람풀이를 보니 bitset 을 안쓰고 그냥 해도 되는 것을 깨달았다.. 쉣
그렇지만 풀이를 해보면
string s;
for(int i=0; i<n; i++){
auto c = bitset<16>(arr1[i]|arr2[i]);
sm[i] = c.to_string();
}
n 의 크기가 최대 16 이므로 arr1 의 숫자와 arr2 의 숫자를 or 한 것을 16자리로 하고 string 으로 변환하여 sm 배열에 넣는다. (n의 크기가 최대 16이어서 sm[17] 정도로 선언하였다)
for(int i=0; i<n; i++){
auto c = sm[i];
string x = "";
for(int i = 16-n; i<16; i++){
if(c[i]=='1'){
x += "#";
}
else{
x += ' ';
}
}
answer.push_back(x);
}
sm 배열에 있는 문자열을 거꾸로 읽어서 1 이면 # , 0 이면 빈칸으로 하는 문자열 x 를 만든다. 그리고 answer vector 에 추가한다.
bitset 이 아예 필요가 없었다...
아래는 전체 코드이다.
#include <string>
#include <vector>
#include <bitset>
#include <iostream>
#include <typeinfo>
using namespace std;
string sm[17];
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
string s;
for(int i=0; i<n; i++){
auto c = bitset<16>(arr1[i]|arr2[i]);
sm[i] = c.to_string();
}
for(int i=0; i<n; i++){
auto c = sm[i];
string x = "";
for(int i = 16-n; i<16; i++){
if(c[i]=='1'){
x += "#";
}
else{
x += ' ';
}
}
answer.push_back(x);
}
return answer;
}