[진법] 1373. 2진수 8진수

알고리즘/백준 알고리즘

2020. 5. 5. 15:26

1. 문제 해결 전략

입력될 숫자(문자)의 길이가 1000000자리수 까지 표현될 수 있어서 2진 -> 10진 -> 8진으로 

stack을 사용해서 풀시 10진 값이 엄청나게 커질수 있어서 표현이 불가능하다.

따라서, 2진법을 바로 8진법으로 바꿈과 동시에 자리수 하나하나를 출력해야 한다.

 

#include <iostream>
#include <string>

using namespace std;

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

	int n = s.size();

	if (n % 3 == 1)
		cout << s[0];
	else if (n % 3 == 2)
		cout << (s[0] - '0') * 2 + (s[1] - '0');

	for (int i = n % 3; i < n; i += 3)
	{
		cout << (s[i] - '0') * 4 + (s[i + 1] - '0') * 2 + (s[i + 2] - '0');
	}
	cout << '\n';
	return 0;
}

 

 

2. 걸린 시간

실패

 

3. 느낀점

너무 무식하게 풀었던 것 같다. 8진법을 2진법으로 바꾸는과정을 처음 보고 무릎을 탁 치게됐다. 이런게 알고리즘이지! 하는 문제. 풀이가 dp문제와 비슷한 것 같다.

 

4. 링크

https://www.acmicpc.net/problem/1373