[Programmers] 이진 변환 반복하기(Lv.2)

Alice·2023년 8월 3일
0

풀이 소요시간 : 15분

레벨2 를 정주행 하고 있지만, 문제 마다 난이도가 천차만별이다. 문제를 풀면서 이게 이렇게 간단할리가 없는데.. 하는 생각으로 제출했는데 문제없이 통과됬다. 별다른 접근 방식은 없다.

다만 이번에 여유가 되서 알고리즘 헤더의 count 함수를 한번 사용해봤다. 또한 처음에는 bitset 헤더를 사용하여 문제 풀이를 시도했는데, 2진 비트 길이를 무조건 상수 값으로 선언해야 한다는 점을 알고 빠르게 포기했다.


전체 코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string Make_String(int num) {
    string str = "";
    while(num > 0)
    {
        if(num % 2 == 0)
        {
            str = '0' + str;
        }
        else if(num % 2 == 1)
        {
            str = '1' + str;
        }
        
        num /= 2;
    }
    return str;
}

vector<int> solution(string s) {
    int Cnt_String = 0;
    int Cnt = 0;
    
    while(s != "1")
    {   
        int len = s.length();
        int count_one = count(s.begin(), s.end(), '1');
        
        //0 제거 수
        Cnt += (len - count_one);
        
        //0 제거 문자열 길이
        len -= (len - count_one);
        
        s = Make_String(len);
        Cnt_String++;
    }
    
    return {Cnt_String, Cnt};
}
profile
SSAFY 11th

0개의 댓글