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

Seulguo·2022년 10월 4일
0

Algorithm

목록 보기
171/185
post-thumbnail

🐣 문제

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


🐤 풀이

  1. s가 1이 될 때 까지 0이면 제외시켜주고 zero ++를 해준다.
  2. 0이 아니면 length ++를 해, 0을 제외한 길이를 구한다.
  3. 이진 변환 후 s에 저장하고 다시 반복한다.

• s의 최대 길이가 150,000이기 때문에 이진 변환 할 때 int로 계산하면 안된다. int로 계산했더니 테스트 케이스 9, 10, 11 에서 실패가 떴고, string으로 계산해주니 통과했다.


🐥 코드

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    int zero = 0;
    int cnt = 0;
    
    while(s != "1"){ 
        int length = 0;
        
        for(int i = 0; i < s.size(); i ++){
            if(s[i] == '0'){
                zero ++;
            }
            else{
               length ++; 
            }
        }
        
        s = "";
        while(length > 0){
            if(length % 2 == 0) s += "0";
            else s += "1";
            length /= 2;
        }
        reverse(s.begin(), s.end());
        
//         int two = 0;
//         s = "";
        
//         for(int i = 1; length > 0; i *= 10){
//             int mod = length % 2;
//             two += mod * i;
//             length /= 2;
//         }
        
//         s = to_string(two);

        cnt ++; 
    }
    
    answer.push_back(cnt);
    answer.push_back(zero);
    
    return answer;
}

0개의 댓글