출처 : 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;
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 배달 ( 다익스트라 알고리즘 ) (0) | 2021.04.22 |
---|---|
프로그래머스 - 배달 ( 플로이드-워셜 알고리즘 ) (0) | 2021.04.22 |
프로그래머스 - 스티커 모으기 2 (0) | 2021.04.09 |
프로그래머스 - 숫자 게임 (0) | 2021.04.09 |
프로그래머스 - 길 찾기 게임 (0) | 2021.04.05 |