본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 이진 변환 반복하기 c++

by 오오오니 2023. 5. 14.

https://school.programmers.co.kr/learn/courses/30/lessons/70129?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

문제에서 제시한 대로

1. 0을 제거

2. 0을 제거한 수의 길이구한다.

3. 길이를 구한 수를 이진수로 바꾼다.

를 반복하면 된다.

아래 코드대로 이진수로 변환하면 4는 001이 되는데
0을 제거할거니까 뒤집어주지 않아도 된다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    int cnt=0,zero=0;
    
    while(true)
    {
        string temp="";
        //0제거   1111
        int s_length=s.length();
        for(int i=0;i<s_length;i++)
        {
            if(s[i]=='1')
                temp+='1';
            
        }
        //0의 개수 : 전체 길이 - 1의 개수
        zero+=(s_length-temp.size());
        cnt++;
        //1인지 체크
        if(temp=="1")
            break;
        //길이를 int에 할당  4
        int temp_int = temp.size();
        //4를 이진수로 바꾸기
       
        s="";
        while(temp_int)
        {
            s+=(temp_int%2+'0');
            temp_int/=2;
        }
        
    }
    answer.push_back(cnt);
    answer.push_back(zero);
    return answer;
}