[월간 코드 챌린지 시즌1] 이진 변환 반복하기 (C++)
https://school.programmers.co.kr/learn/courses/30/lessons/70129
풀이
문제에서 이야기한 1) 0을 제거하는 일과 2) 변환한 2진수의 길이를 2진수로 바꾸는 일 2가지를 반복적으로 해줌으로써 풀 수 있었다. temp
를 이용해 기존의 문자열과 적절하게 바꿔주면서 푸는 게 중요했던 것같다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <string>
#include <vector>
using namespace std;
vector<int> solution(string s) {
int cnt = 0, zero_cnt = 0;
string tmp = "";
while(s != "1"){
for(char c : s){
if(c == '1') tmp += '1'; // 1) 0 제거
else zero_cnt++;
}
s = tmp, tmp = "";
int size = s.length(); // 2) 길이 변환
while(size > 0)
tmp += to_string(size % 2), size /= 2;
s = "";
for(int i = tmp.length() - 1; i >= 0; i--)
s += tmp[i];
tmp = "";
cnt++;
}
return {cnt, zero_cnt};
}
This post is licensed under CC BY 4.0 by the author.