#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
string solution(string binary){
string answer = "";
int count = 0, sum = 0;
for (int i = (int)binary.length() - 1; i >= 0; i--) {
if (binary[i] == '1'){
switch (count) {
case 0:
sum += pow(2, 0);
break;
case 1:
sum += pow(2, 1);
break;
default:
sum += pow(2, 2);
break;
}
}
count++;
if (count == 3 && i != 0) {
answer += to_string(sum);
sum = 0;
count = 0;
}
}
answer += to_string(sum); // 마지막에 남은거 문자열에 더함
reverse(answer.begin(), answer.end()); // 더한 문자열을 뒤집음
cout << answer << endl;
return answer;
}
int main(){
string input;
cin >> input;
solution(input);
return 0;
}
string input
의 맨 마지막 인덱스부터 3개씩 끊는다.int count
변수를 두어 i
가 증가될 때 마다 count
변수도 증가시킨다.binary[i]
가 1일 경우에만 제곱 계산을 한다.count
가 3이 되면 3개 계산이 끝났다는 의미이므로 count
, sum
변수를 0으로 초기화한다.얼핏 봐서는 간단한 문제인데 생각보다 그렇지 않았다. 막판에 코드를 다 작성하고 확인할 때 쓸데없이 0이 붙는 문제가 생겼다. 그래서 디버깅해보니깐
if (count == 3) {
answer += to_string(sum);
sum = 0;
count = 0;
}
그때는 if 조건문에 이렇게만 썼는데, 이 코드가 문자열의 길이가 3의 배수일 때 모든 계산을 끝낸 뒤 0을 붙이는 문제를 만든거였다. 그래서 i != 0
조건을 추가했더니 성공!