잡학다식을꿈꾼다 2023. 11. 27. 12:07
반응형

문제

2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.

입력

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

예제 입력 1 복사

11001100

예제 출력 1 복사

314

 

 문제 자체는 간단하다. 말그대로 2 진수로 주어진 입력을 8 진수로 변환하기만 하면된다. 2 진수를 10 진수로 변환하여 이를 다시 8 진수로 변환하는 방법을 떠올릴 수 있지만 그리 효율적이지는 않을 것 같다. 나는 2 진수와 8 진수의 관계를 이용하여 다음과 같이 문제를 해결해주었다.

 

  1. 2 진수 데이터를 받는다. 이 때 형태는 문자열이다.
  2. 데이터로 받은 문자열의 길이가 3의 배수인지 확인한다. 아닌 경우 3의 배수가 될때까지 문자열의 맨 앞에 '0'을 추가해준다.
  3. 문자열을 3 단위로 순회하면서 (index * 4) + ((index + 1) * 2) + ((index + 2) * 1)을 구하고 출력한다. 이는 2 진수의 자릿수 3 묶음과 8 진수의 1 자리가 같다는 것을 이용한 것이다.

 다음은 실제 구현한 코드이다.

 

#include <iostream>
#include <string>


int main() 
{
	std::string input;

	std::cin >> input;

	while (input.size() % 3 != 0) 
	{
		input = '0' + input;
	}

	for (int i =0; i< input.length(); i += 3) 
	{
		int out = (input[i] - '0')*4 + (input[i+1] - '0') * 2 + (input[i+2] - '0') * 1;
		std::cout << out;
	}

	return 0;
}

 

 이 문제는 2 진수와 8 진수 사이의 자릿수 관계를 이해하면 쉽게 풀 수 있는 문제였다. 이 것으로 이번 글을 마친다.

반응형