본문 바로가기

뭐라도 공부해보자!!( 이론 )/자료구조 및 알고리즘

백준 1373번, 2진수 8진수

반응형

문제

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 진수 사이의 자릿수 관계를 이해하면 쉽게 풀 수 있는 문제였다. 이 것으로 이번 글을 마친다.

반응형

'뭐라도 공부해보자!!( 이론 ) > 자료구조 및 알고리즘' 카테고리의 다른 글

백준 2089, -2 진수  (1) 2023.11.28
백준 1212번, 8 진수 2 진수  (1) 2023.11.27
17087 백준, 숨바꼭질 6  (2) 2023.11.25
GCD 알고리즘  (1) 2023.11.25
백준 2798, 블랙잭  (0) 2022.11.21