[C++로 풀이] 이진 변환 반복하기⭐⭐
카테고리: Programmers
태그: Coding Test Algorithm
📌 이진 변환 반복하기
난이도 ⭐⭐
🚀 문제
🚀 내 풀이 ⭕
#include <string>
#include <vector>
using namespace std;
vector<int> solution(string s) {
vector<int> answer(2);
int count = 0; // 이진 변환의 횟수
int sum = 0; // 제거된 모든 0의 개수
while(s != "1"){
int tempCount = 0; // 해당 s의 1의 개수
// s의 1의 개수 세기
for(int i = 0; i < s.length(); i++)
if (s[i] == '1')
tempCount++;
// s의 0의 개수 누적 합산
sum += s.length() - tempCount;
// 0제거한 x의 길이나 마찬가지인 tempCount를 2진법으로 표현
s = "";
while(tempCount > 0){
if (tempCount % 2 == 0) s += "0";
else s += "1";
tempCount /= 2;
}
count++;
// 사실 제대로 이진법으로 변환하려면 s를 reverse 해줘야하는데 어차피 해당 이진법을 구하는게 아닌 0의 개수, 1의 개수만 따지므로 reverse 하지 않아도 됨.
}
answer[0] = count;
answer[1] = sum;
return answer;
}
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기