출처 : 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; }