관리 메뉴

기억을 위한 기록들

[프로그래머스 lv 2 ] - 이진 변환 반복하기 (C++) 본문

Coding Test - cpp/String

[프로그래머스 lv 2 ] - 이진 변환 반복하기 (C++)

에드윈H 2023. 11. 20. 12:43

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

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

programmers.co.kr

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    
    int changeCount = 0;
    int zeroCount = 0;
    
    while(1)
    {
        int oneLengthNum=0;
        
        //현재 문자열의 1의 갯수 및 0의 갯수 확인
        for(auto item : s)
        {
            if(item=='1')
            {
                oneLengthNum++;
            }else
            {
                zeroCount++;
            }
        }
        
        string convertedResult;       
        
        //반복횟수 추가
        changeCount++; 
        
        //1개라면 종료
        if(oneLengthNum == 1)
        {
            convertedResult = '1';
            break;
        }else
        {
            //2진변환 진행
            while(oneLengthNum != 0)
            {
                if(oneLengthNum%2 == 1)
                {
                    convertedResult += '1';
                }else
                {
                    convertedResult += '0';
                }
                oneLengthNum /= 2;
            }
        }         
        
        s.clear();
        s = convertedResult;     
    }
    
    answer.push_back(changeCount);
    answer.push_back(zeroCount);
    
    return answer;
}