주어진 이진수 문자열에서 1의 개수를 다시 이진수 문자열로 바꾸어주는 방식을 반복하며 조건에 맞게 결과를 리턴해주면 되는 문제이다.
#include <string>
#include <vector>
#include <bitset>
using namespace std;
vector<int> solution(string s) {
vector<int> answer(2,0);// 변환 횟수, 없앤 0의 개수
while (s != "1") {
int cnt = 0, idx = 0;
for(auto c : s) if (c == '1') cnt++;// 1의 개수
answer[0]++;
answer[1] += s.size() - cnt;// 0의 개수를 더해준다.
s = bitset<32>(cnt).to_string();// 길이 32짜리로 이진수 변환 해준다
for(; idx<32; idx++) if (s[idx] == '1') break;// 맨처음 1로 시작하는 인덱스를 구해준다.
s = s.substr(idx);
}
return answer;
}