(C++) 백준 1373번 - 2진수 8진수

코딩너구리·2025년 9월 30일

코딩 문제 풀이

목록 보기
7/266

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를 곱해 변환하는 부분을 좀 더 압축시키고 싶으니 생각해보자.

0개의 댓글