프로그래머스/2레벨

이진 변환 반복하기/C++

Koalitsiya 2023. 1. 5. 13:46

프로그래머스 - 이진 변환 반복하기

 

프로그래머스

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

programmers.co.kr

풀이 방법

1. int형 count, countZero와 문자열 temp를 선언합니다.

2. 문자열 s의 i번째 문자가 0이면 countZero++을 하고 1이면 temp += "1"을 해줍니다.

3. 추가로 선언한 num에 temp.length()를 대입하고 문자열 s를 비워줍니다.

4. num이 0이 아닐 때까지 이진 변환을 반복합니다.

5. count++을 해주고 이를 s가 "1"이 될때까지 반복합니다.

6. 반복문이 끝나면 count와 countZero를 answer에 담고 리턴

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    
    int count = 0;
    int countZero = 0;
    
    
    while(s != "1") {
        string temp = "";
        for(int i = 0; i < s.length(); i++){
            if(s[i] == '0')
                countZero++;
            else 
                temp += '1';
        }
        
        int num = temp.length();
        
        s = "";
        while(num > 0){
            if(num % 2) s = "1" + s;
            else s = "0" + s;
            
            num /= 2;
        }
        
        count++;
    }
    
    answer.push_back(count);
    answer.push_back(countZero);
    
    return answer;
}