본문으로 바로가기

출처 : programmers.co.kr/learn/courses/30/lessons/70129

 

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

 

programmers.co.kr

 

고려사항

  • 따로 메소드를 분리하여, 문자열에서 '0'을 제외하는 메소드 ( '1' 일때만 ret에 담아 반환한다 )
    문자열의 길이를 입력받아 2진법으로 변환하여 반환 ( reverse 사용 ) 정의해주었다.
  • 사라진 0의 수는 단순하게 이전 문자열 길이와 0을 제거한 새 문자열의 길이의 차로 구했다.

 

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
string lenToBinary(int len){
string ret;
while(len != 0){
ret.push_back(len % 2 + '0');
len /= 2;
}
reverse(ret.begin(), ret.end());
return ret;
}
string removeZero(string s){
string ret;
for(char c : s){
if(c == '1'){
ret.push_back(c);
}
}
return ret;
}
vector<int> solution(string s) {
vector<int> answer;
string ret;
int cntR = 0, cntZ = 0;
int prevLen, curLen;
while(s != "1"){
prevLen = s.size();
s = removeZero(s);
curLen = s.size();
s = lenToBinary(curLen);
++cntR;
cntZ += prevLen - curLen;
}
answer.push_back(cntR);
answer.push_back(cntZ);
return answer;
}