포스트

백준 1373. 2진수 8진수

알고리즘 기초 문제 중 수학1 연습 문제(301)

2진수 8진수

1. 간단 설명


2진수가 주어졌을 때, 8진수로 변환하는 문제

예시

2진수 11001100 가 주어지면, 8진수 314로 변환하여 출력한다

2. 문제 분석


필요 변수

주어지는 수의 길이는 100만을 넘지 않는다

즉 2^1,000,000 까지 가능하단 말인데, 이는 정수형으로 처리가 불가능하다

이를 위해선 숫자를 입력받는 동시에 처리해주어야하므로 문자열로 입력받는다

알고리즘

1
2
3
4
5
1. 문자열로 2진수를 입력받는다
2. 8진수로 변환하기 위해 3글자씩 끊어야 하므로, 입력 문자열의 수를 확인한다
	2-1. 3개씩 나누어 떨어지지 않는다면 앞에 0을 추가한다
3. 3글자씩 잘라 확인한다
	3-1. 첫째 자리는 4를 곱하고, 둘째 자리는 2를 곱하고, 마지막 자리는 1을 곱한 값을 출력한다

3. 소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>

using namespace std;

int main() {
	string input;
	cin >> input;

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

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

	return 0;
}
  • 처음에 bitset을 이용하여 도전했다가 털렸다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <bitset>

using namespace std;

int main() {
	bitset<8> bit;
	cin >> bit;

	int n = bit.to_ulong();

	cout << std::oct << n;

	return 0;
}

간단하게 bitset을 이용해 2진수를 10진수로, 이를 8진수로 변환해 출력하는 방법을 사용했는데,

입력값이 100만 미만의 수인줄 알았으나, 무지막지하게 큰 수 였음

항상 문제를 잘 읽어 볼 것!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.