문제
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
int cnt = 0;
int zeroCnt = 0;
while(s != "1") {
cnt++;
string tmp = "";
for(int i=0; i<s.length(); i++) {
if(s.at(i) == '1') tmp += s.at(i);
else zeroCnt++;
}
int len = tmp.length();
s = "";
while(len > 0) {
if(len % 2 == 0) s = '0' + s;
else s = '1' + s;
len /= 2;
}
}
answer.push_back(cnt);
answer.push_back(zeroCnt);
return answer;
}
풀이
수행 횟수를 카운팅하기 위해 cnt 변수를 1씩 증가시켜준다. 그리고 0을 제외한 1들을 임시 문자열인 tmp 에 넣어주면서 0 의 수를 나타내는 zeroCnt 변수를 1씩 증가시켜준다.
tmp 의 길이를 2진수로 변환하기 위해 2와의 나머지를 비교하면서 기존 문자열 s 에 새롭게 할당해준다.
해당 과정을 반복하면서 문자열 s 가 "1" 이 될 때까지 수행한다.