
문자열을 순회하면서 0이면 0개수에 ++ , 1이면 그걸 새로운 문자열에 넣기. 그렇게 해서 새로 나온 문자열의 길이를 이진수로 변환해주는 함수 하나만 작성하면 된다.
이 문제를 원활하게 풀려면 십진수 -> 이진수로 변환하는 과정에 대해서 잘 알아야 하는데, 학교 전공 과목으로 이산수학을 들었다면 알고 있을 것이다.
특정 수를 2로 나누면서 몫이 0이 나올 때 까지의 나머지를 역으로 올라가면서 이진수를 구성하면 된다.
#include <string>
#include <vector>
using namespace std;
string TurnLengthToBin(int len)
{
string ret = "";
while(len != 0)
{
if(len % 2 != 0) ret += "1";
else ret += "0";
len /= 2;
}
return ret;
}
vector<int> solution(string s) {
vector<int> answer(2, 0);
// s가 "1"이 될 때 까지 아래 구문을 반복
while(s != "1")
{
string newStr = "";
// 기존 문자열에서 0 제거
for(char c : s)
{
if(c == '1') newStr += "1"; //1이면 새 문자열에 더함.
else { ++answer[1];} // 아니면 제거된 0의 개수 더하기
}
s = TurnLengthToBin(newStr.length()); // 새로 나온 문자열을 기존 문자열에 덮어 씌우기
++answer[0];
}
return answer;
}