본문 바로가기

Algorithm & SQL/Baekjoon

[Algorithm] [Python] 백준/BOJ - 1373 _ 2진수 8진수

1373 - 2진수 8진수

문제 설명


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

입력


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

출력

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


제출 코드

1차 제출 코드

from sys import stdin

binary_List = list(map(int, stdin.readline().strip()))[::-1]
total = 0
res = []
for i in range(len(binary_List)):
    total += binary_List[i] * (2 ** i)

while True:
    if total == 0:
        print(*res[::-1], sep='')
        break
    mok = total // 8
    mod = total % 8
    total = mok
    res.append(mod)

처음에 제출한 코드는 테스트케이스는 만족하였으나 시간 초과가 떳다.

2진수를 10진수로 변환하고, 이를 8진수로 변환하였다.

최종 제출 코드
최종 제출은 내장 함수들을 활용하였다.

제출한 코드는 아래와 같다.

print(oct(int(input(), 2))[2:])

ㅎㅎㅎ.... 매우 짧고 간결하지만 매우 강력하다.

int() 함수는 주로 타입캐스팅에 사용된다, int() 함수의 두번째 인자는 진법을 의미한다, default는 10이기 때문에 값을 따로 입력을 안해줄 경우 10진수로 인식한다.

따라서 위 코드는 2진수를 입력받고 8진수로 출력을 하되, 앞에 붙는 8진수를 알려주는 문자 0o를 제외하고 출력하도록 하는 코드다.