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

se.jeon·2023년 2월 12일
0

알고리즘

목록 보기
4/21

문제

과정

16진수 문제와 나란히 있길래, 이번에도 날로 먹을 수 없을지 고민하다가 결과 - 초기 와 같은 답을 만들었다.

하지만 문제가 있었다.
주어지는 수의 길이가 333,334까지 될 수 있다는 것.

값은 제대로 나오는 것 같은데 범위 문제인가?
머리를 싸매면서 온갖 기능들을 찾아 헤멨다.
범위를 얼마만큼 지정 해 줘야하는지 컨버터를 돌려보면서 테스트하다가

아니, 자바나 파이썬은 변환도 쉽게 할 수 있는데 왜 이렇게 복잡하지??? 라는 생각이 들었다.
약 1시간을 기능 찾아다니기만 하다가 도출한 결과.

길면 파이썬을 쓰자.
그리고 정답이었다.

파이썬을 사용하니 너무 간단해서 회의감이 들 정도로 쉽게 해결했다.

결과 - 초기

//
// Created by 전시은 on 2023/02/12.
//
// 문제 :: 8진수 2진수
// 8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
// 입력 :: 첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
// 출력 :: 첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.


#include <iostream>
#include <cstring>
#include <string>
#include <bitset>
using namespace std;


int main()
{
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    string sInput, sBinary;
    int nInputResult;
    cin >> sInput;

    char* cArray = new char[sInput.length() + 1];
    strcpy(cArray, sInput.c_str());

    nInputResult = strtol(cArray, NULL, 8);

    if(nInputResult == 0)
    {
        cout << 0;
    }
    else
    {
        //itoa(nInputResult, cArray, 2);
        sBinary = bitset<3333334>(nInputResult).to_string(); //to binary
        auto pos = sBinary.find('1');
        if(pos != string::npos)
        {
            string sResult = sBinary.substr(pos);
            cout << sResult;
        }
    }

    return 0;
}

결과 - 후기

print(bin(int(input(), 8))[2:])
profile
취미 다이소

0개의 댓글