[Programmers] Level2 : 이진 변환 반복하기
Question
Solution
- string s의 사이즈가 1이 될때까지 while 루프를 돈다. 매번 루프 할때마다 cnt를 증가시킨다.
- 한 번 루프 할때마다
1step. '0' 제거
,2step. 이진수로 변환
을 시행한다. - 맨 처음 ‘0’의 수를 for 루프로 카운팅 하고, ‘0’ 제거의 경우 remove와 erase를 이용하여 ‘0’을 제거한다.
- 1의 갯수를 이진수로 stack을 이용하여 변환시킨다.
Cord
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
vector<int> solution(string s)
{
vector<int> answer;
int cnt = 0;
int zero = 0;
while (s.size() > 1)
{
cnt++; // 변환 수
// '0' 카운팅
for (char i : s)
{
if (i == '0') { zero++; }
}
// '0' 제거
s.erase(remove(s.begin(), s.end(), '0'), s.end());
// 십진수를 이진수로 변환
int decimal = s.size();
int binary = 0;
stack<int> data;
while (decimal / 2 > 0)
{
data.push(decimal % 2);
decimal /= 2;
}
data.push(1); // 마지막은 항상 1이 나오고 넣어준다.
// stack의 숫자를 s에 대입
s = "";
while (!data.empty())
{
s += to_string(data.top());
data.pop();
}
}
answer.push_back(cnt);
answer.push_back(zero);
return answer;
}