본문 바로가기
알고리즘

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

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

8진수 2진수 성공

 

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 256 MB 39037 13015 10789 35.580%
 

문제

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

입력

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

출력

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 

 

예제 입력 1

314

예제 출력 1

11001100

 

과정

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:])
728x90
반응형