Coding Test - cpp/String
[프로그래머스 lv 1 ] - [1차] 비밀지도
에드윈H
2021. 9. 13. 20:28
https://programmers.co.kr/learn/courses/30/lessons/17681
1. 리팩토링 전 : 첫 성공 풀이로, 풀다보니 두개의 지도를 합친vector와 숫자를 '#'로 변환하는 vector 두개로 나눴었는데, 다 푼다음에 다시 보니 vector 두개있을 필요가 없을 거 같아서 리팩토링
#include <string>
#include <vector>
using namespace std;
vector<string> solution( int n, vector<int> arr1, vector<int> arr2 ) {
vector<string> addedResult;
//두개의 지도 합치기
for( int i = 0; i < arr1.size(); i++ )
{
string num;
for( int j = arr1.size() - 1; j >= 0; --j )
{
//비트연산으로 출력
int result = arr1[i] >> j & 1;
int result2 = arr2[i] >> j & 1;
//비트연산의 결과 합이 2이라면 1
if( result + result2 == 2 )
num += to_string( 1 );
else
num += to_string( result2 + result );
}
addedResult.push_back( num );
}
//합친 지도 그리기
vector<string> result;
for( int i = 0; i < addedResult.size(); i++ )
{
string numValue;
string curNum = addedResult[i];
for( int j = 0; j < curNum.size(); j++ )
{
if( curNum[j] == '1' )
numValue += '#';
else
numValue += ' ';
}
result.push_back( numValue );
}
return result;
}
2. 리팩토링 후
#include <string>
#include <vector>
using namespace std;
vector<string> solution( int n, vector<int> arr1, vector<int> arr2 ) {
vector<string> result;
//두개의 지도 합치기
for( int i = 0; i < arr1.size(); i++ )
{
string value;
for( int j = arr1.size() - 1; j >= 0; --j )
{
//비트연산으로 출력
int result = arr1[i] >> j & 1;
int result2 = arr2[i] >> j & 1;
//비트연산의 결과 합이 1이상이면 #
value += result + result2 >= 1 ? '#' : ' ';
}
result.push_back( value );
}
return result;
}