백준 1373번 2진수 8진수

< 백준 1373번 2진수 8진수 - 마포 코딩박 >

사용한 알고리즘: 구현


 입력되는 2진수를 8진수로 바꾸어 출력하는 문제입니다.

문제풀이는 다음과 같습니다.

(1) (코드 5~22)
 2진수의 3자리씩 묶어서 8진수로 변환 할 것입니다. ( 2^0=1, 2^1=2, 2^2=4 ; 3자리 )
 입력되는 2진수를 string으로 받습니다. 답 또한 string으로 만들 것이기에 입력받은 2진수의 큰 자리수 부터 변환합니다.
 이를 위해 끝자리수 부터 큰 자리수로 재귀로 먼저 들어가서 답을 구해줍니다.

#include <bits/stdc++.h>
using namespace std;
string N, ans;
// 3자리씩 묶어보기
void MakeAns(int idx){
// 최대 자리수 이상은 보지않는다.
if(idx<0) return;
// ans 의 앞자리부터 만들고 싶어서 재귀부터 한다.
MakeAns(idx-3);
// idx 위치 포함 3자리 본다.
int temp = 0;
// 2^0=1, 2^1=2, 2^2=4 ; 보게될 3자리
int val = 1;
for(int i=0; i<3; ++i){
// 최대 자리수 이상은 보지않는다.
if(idx<0) break;
temp += (N[idx]-'0')*val;
idx--;
val*=2;
}
char attach = temp+'0';
ans += attach;
}
int main(){ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
cin>>N;
// st: 끝 index
int st = N.size()-1;
MakeAns(st);
cout<< ans << '\n';
return 0;
}
view raw BOJ 1373.cpp hosted with ❤ by GitHub


댓글