백준 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진수의 큰 자리수 부터 변환합니다.
이를 위해 끝자리수 부터 큰 자리수로 재귀로 먼저 들어가서 답을 구해줍니다.
사용한 알고리즘: 구현
입력되는 2진수를 8진수로 바꾸어 출력하는 문제입니다.
문제풀이는 다음과 같습니다.
(1) (코드 5~22)
2진수의 3자리씩 묶어서 8진수로 변환 할 것입니다. ( 2^0=1, 2^1=2, 2^2=4 ; 3자리 )
입력되는 2진수를 string으로 받습니다. 답 또한 string으로 만들 것이기에 입력받은 2진수의 큰 자리수 부터 변환합니다.
이를 위해 끝자리수 부터 큰 자리수로 재귀로 먼저 들어가서 답을 구해줍니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!