2의 3승은 8이다. 2진수는 뒤에서부터 세개씩 3개씩 묶어 자른 후 계산하면 8진수로 계산되는 부분을 이용해서 문제를 풀었다.
따라서 자릿수가 맞지 않는 경우 맞춰주는 작업을 하고 진행 해 주었다.
길이가 무한정한 문제로 string 자료형으로 풀어주었다.
c
//
// Created by 전시은 on 2023/03/09.
//
// 문제 :: 2진수 8진수
// 링크 :: https://www.acmicpc.net/problem/1373
// 입력 :: 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
// 출력 :: 첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.
#include "../Problems.h"
#include <iostream>
#include <string>
using namespace std;
//int main()
int Solve1373()
{
cout << "[디버깅용] Solve1373 :: 시작지점 >> \n";
cin.tie(NULL);
ios_base::sync_with_stdio(false);
string sInput;
string sResult;
cin >> sInput;
if(sInput.size() % 3 != 0)
{
string sTemp;
sTemp += '0';
if(sInput.size() % 3 == 1)
{
sTemp += '0';
}
sTemp += sInput;
sInput = sTemp;
}
for(int i = 0; i < sInput.size(); i++)
{
if(i % 3 == 2)
{
int nSum = 0;
if(sInput[i-2] == '1')
{
nSum += 4;
}
if(sInput[i-1] == '1')
{
nSum += 2;
}
if(sInput[i] == '1')
{
nSum += 1;
}
sResult += (char) nSum + '0';
}
}
cout << sResult;
return 0;
}