C++:: 프로그래머스 < 이진 변환 반복하기 >

jahlee·2023년 6월 24일
0

프로그래머스_Lv.2

목록 보기
59/106
post-thumbnail

주어진 이진수 문자열에서 1의 개수를 다시 이진수 문자열로 바꾸어주는 방식을 반복하며 조건에 맞게 결과를 리턴해주면 되는 문제이다.

#include <string>
#include <vector>
#include <bitset>
using namespace std;

vector<int> solution(string s) {
    vector<int> answer(2,0);// 변환 횟수, 없앤 0의 개수
    while (s != "1") {
        int cnt = 0, idx = 0;
        for(auto c : s) if (c == '1') cnt++;// 1의 개수 
        answer[0]++;
        answer[1] += s.size() - cnt;// 0의 개수를 더해준다.
        s = bitset<32>(cnt).to_string();// 길이 32짜리로 이진수 변환 해준다
        for(; idx<32; idx++) if (s[idx] == '1') break;// 맨처음 1로 시작하는 인덱스를 구해준다.
        s = s.substr(idx);
    }
    return answer;
}

0개의 댓글