최대 1 분 소요

Question

Q Q2


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;
}

Result

Result