문제 풀이/프로그래머스 알고리즘, SQL

[프로그래머스 월간 코드 챌린지 시즌 1] 이진 변환 반복하기 (구현, 계산) [C++]

dev_beomgeun 2022. 1. 11. 20:11
728x90

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

 

코딩테스트 연습 - 이진 변환 반복하기

 

programmers.co.kr


단순한 문제이다.

주어진 이진수를

1. 이진수에서 0을 제외한다. - deleteZero 함수 (pair <string, int>로 변환한 이진수와 지운 0의 개수를 반환한다)

2. 나온 이진수 결과물의 길이를 다시 이진수로 만든다. - convert 함수

3. 위의 과정을 반복하면서 최종적으로 1이 나오면 종료한다.

 

여기서 진행하면서 변환 횟수와 지운 0의 개수를 세서 반환하면 된다.


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

using namespace std;

typedef pair<string, int> psi;

psi deleteZero(string target){
    int zeroCnt = 0;
    string result = "";
    for(int i = 0 ; i < target.size() ; i++){
        if(target[i] == '0'){
            zeroCnt++;
        }
        else
            result += target[i];
    }
    return {result, zeroCnt};
}

string convert(string target){
    int before = target.size();
    string after = "";
    while(before){
        after += to_string(before % 2);
        before  = before / 2;
    }
    reverse(after.begin(), after.end());
    return after;
}

vector<int> solution(string s) {
    vector<int> answer;
    int totalZero = 0;
    int cnt = 0;
    while(s != "1"){
        psi result = deleteZero(s);
        totalZero += result.second;
        s = convert(result.first);
        cnt++;
    }
    answer.push_back(cnt);
    answer.push_back(totalZero);
    return answer;
}

 

728x90