이진 변환 반복-Lv2

108번뇌·2021년 1월 4일
0

원래나는

#include <string>
#include <vector>
#include <iostream>

using namespace std;

string TransformToBinary(string s)
{
    int iLength = s.length();//s의 길이값이 나온다. -> 이 길이값을 다시 이진변환 해야함
    string sTemp;
    while(iLength>0)
    {
        int iResult = iLength%2;//나머지
        sTemp = to_string(iResult) + sTemp;//
        iLength = iLength/2;
       
        sTemp = to_string(iLength)+sTemp;
    }
    return sTemp;
}

vector<int> solution(string s) {
    vector<int> answer;
    
    int iFirst = 0;
    int iSecond = 0;
    while(1)
    {
        iFirst++;
        string sTemp;
     
        for(int i=0; i<s.length(); i++)
        {
            if(s[i]=='1')   sTemp+=s[i];
            else    iSecond++;
        }
        s = TransformToBinary(sTemp);
        if(s == "1")       break;
    }
    answer.push_back(iFirst);
    answer.push_back(iSecond);
    
    return answer;
}

이렇게했는데 계속 시간초과 뜸

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer(2, 0);
    int zero = 0, round = 0;
    
    while(s != "1")
    {
        string tmp = "";
        int size = 0, num;
        round++;
        
        for(int i = 0; i < s.size(); i++)
        {
            if(s[i] == '0')
                zero++;
            else
                tmp += "1";
        }
        
        num = tmp.size();
        s = "";
        while(num > 0)
        {
            s += to_string(num % 2);
            num /= 2;
        }
    }
    
    answer[0] = round;
    answer[1] = zero;
    return answer;
}

[[[[[[[[[[[[[[[[[[[[[진법변환중요]]]]]]]]]]]]]]]]]]]]
while(num > 0)
{
s += to_string(num % 2);
num /= 2;
}
이렇게 해서 컴팩하게 가져가자.

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글