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
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[소수] 1978. 소수 찾기 (0) | 2020.05.05 |
---|---|
[진법] 11576. Base Conversion (0) | 2020.05.05 |
[진법변환] 11005. 진법 변환2 (0) | 2020.05.01 |
[리스트] 1168. 요세푸스 문제 2 (0) | 2020.05.01 |
[링크드리스트] 1158. 요세푸스 문제 (0) | 2020.04.30 |