[백준 알고리즘]/[C++]

2998번 8진수 | Baekjoon BOJ 백준 2998 C++ 코드, 해설, 풀이

말하는펭귄 2021. 1. 21. 12:24
728x90
반응형

 

 

이번 포스팅은 백준 2998번 8진수입니다.

아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.

www.acmicpc.net/problem/2998

 

2998번: 8진수

창영이는 여러 가지 진법을 공부하고 있다. 창영이는 어제 2진법을 배웠고, 오늘은 8진법을 배웠다. 이제, 2진법 수를 8진법 수로 변환하려고 한다. 창영이가 사용한 방법은 다음과 같다. 2진수의

www.acmicpc.net

 

 

 

기본 알고리즘

string 연습

 

 

참고

line 11-16
입력한 2진수의 길이(=ㅣ) 구한 후, 3으로 나누어 떨어지는 길이로 만들기 위한 최소 3의 배수(=t) 구하기

line 18-22
2진수의 길이가 3으로 나누어 떨어질 때까지 수의 앞에 0을 붙이기

line 30
2진수를 앞에서부터 세자리 씩 그룹 지은 string 추출

line 31
추출한 세자리 이진수를 8진수로 변환

 

 

 

 

 

전체 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//백준2998 8진수
 
#include <iostream>
#include <string>
using namespace std;
 
int main() {
    string binary;
    cin >> binary;
 
    int l = binary.length();
    int t = 1;
    while(true) {
        if (t > l) break;
        t += 3;
    }
 
    string zero = "";
    for (int i = 1; i < t - l; i++) {
        zero += '0';
    }
    binary = zero + binary;
    
    string octal = "";
    string cutStr = "";
    string toOctal = "";
    int cutCount = t / 3;
    int start = 0;
    for (int i = 0; i < cutCount; i++, start+=3) {
        cutStr = binary.substr(start, 3);
        toOctal = (cutStr[0- '0'* 4 + (cutStr[1- '0'* 2 + cutStr[2];
        cout << toOctal << endl;
        octal += toOctal;
    }
 
    cout << octal;
 
    return 0;
}
cs

 

 

 

 

 

728x90
반응형