뭐라도 공부해보자!!( 이론 )/자료구조 및 알고리즘
백준 1373번, 2진수 8진수
잡학다식을꿈꾼다
2023. 11. 27. 12:07
반응형
문제
2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.
예제 입력 1 복사
11001100
예제 출력 1 복사
314
문제 자체는 간단하다. 말그대로 2 진수로 주어진 입력을 8 진수로 변환하기만 하면된다. 2 진수를 10 진수로 변환하여 이를 다시 8 진수로 변환하는 방법을 떠올릴 수 있지만 그리 효율적이지는 않을 것 같다. 나는 2 진수와 8 진수의 관계를 이용하여 다음과 같이 문제를 해결해주었다.
- 2 진수 데이터를 받는다. 이 때 형태는 문자열이다.
- 데이터로 받은 문자열의 길이가 3의 배수인지 확인한다. 아닌 경우 3의 배수가 될때까지 문자열의 맨 앞에 '0'을 추가해준다.
- 문자열을 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 진수 사이의 자릿수 관계를 이해하면 쉽게 풀 수 있는 문제였다. 이 것으로 이번 글을 마친다.
반응형