https://www.acmicpc.net/problem/1373
문제
> 2진수가 주어졌을때 8진수로 변환하는 프로그램을 작성해라.
접근
2진수의 오른쪽에서 4번째는 2의 3승 즉 8이므로
오른쪽부터 세 자리씩 잘라서 계산하면 8진수로 변환할 수 있다.
문제 해결
> 들어온 2진수를 3개씩 끊어야 하므로 자릿수가 3의 배수가 되게 앞에 0을 붙여준다.
> 반복문을 3씩 증가시키며 들어온 인덱스들을 2진수의 자리에 맞게 1,2,4를 곱한다.
> 나온 값들을 나열해 출력하면 8진수로 변환된다.
코드
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string binary;
int num = 0;
cin >> binary;
vector<int> result;
while (binary.length() % 3 != 0)
{
binary = '0' + binary;
}
for (int i = 0; i < binary.length(); i += 3)
{
num += (binary[i] - '0') * 4;
num += (binary[i+1] - '0') * 2;
num += binary[i+2] - '0';
result.push_back(num);
num = 0;
}
for (int i : result)
{
cout << i;
}
}

후기
생각보다 쉬웠지만 2진수 자리에 4,2를 곱해 변환하는 부분을 좀 더 압축시키고 싶으니 생각해보자.