본문 바로가기
알고리즘

[알고리즘] 2진수 8진수 - 백준 1373

by se.jeon 2023. 3. 12.
728x90
반응형

2진수 8진수 성공 

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 27913 10933 8996 40.910%

문제

2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.

입력

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

예제 입력 1

11001100

예제 출력 1

314

과정

2의 3승은 8이다. 2진수는 뒤에서부터 세개씩 3개씩 묶어 자른 후 계산하면 8진수로 계산되는 부분을 이용해서 문제를 풀었다.

따라서 자릿수가 맞지 않는 경우 맞춰주는 작업을 하고 진행 해 주었다.

길이가 무한정한 문제로 string 자료형으로 풀어주었다.

결과

//
// Created by 전시은 on 2023/03/09.
//
// 문제 :: 2진수 8진수
// 링크 :: https://www.acmicpc.net/problem/1373
// 입력 :: 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
// 출력 :: 첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

#include "../Problems.h"
#include <iostream>
#include <string>
using namespace std;


//int main()
int Solve1373()
{
    cout << "[디버깅용] Solve1373 :: 시작지점 >> \n";

    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    string sInput;
    string sResult;
    cin >> sInput;

    if(sInput.size() % 3 != 0)
    {
        string sTemp;
        sTemp += '0';

        if(sInput.size() % 3 == 1)
        {
            sTemp += '0';
        }

        sTemp += sInput;
        sInput = sTemp;
    }

    for(int i = 0; i < sInput.size(); i++)
    {
        if(i % 3 == 2)
        {
            int nSum = 0;
            if(sInput[i-2] == '1')
            {
                nSum += 4;
            }
            if(sInput[i-1] == '1')
            {
                nSum += 2;
            }
            if(sInput[i] == '1')
            {
                nSum += 1;
            }
            sResult += (char) nSum + '0';
        }
    }

    cout << sResult;

    return 0;
}

 

 

728x90
반응형