본문 바로가기
공부/알고리즘

[알고리즘][백준] 1373번 2진수 8진수 - 파이썬(python) 풀이

by 무명오리 2024. 3. 1.

 

https://www.acmicpc.net/problem/1373

 

1373번: 2진수 8진수

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

www.acmicpc.net


2진수를 세자리씩 끊으면 8진수가 완성되는 것을 활용해서

입력받은 값의 길이가 3의 배수가 아니면 앞에 '0'을 필요한 만큼 채워주고

각자리마다 값을 곱해서 붙여주었다

import sys

n = str(sys.stdin.readline().rstrip())
'''
n[0] n[3] 0+3*i 2**0
n[1] n[4] 1+3*i 2**1
n[2] n[5] 2+3*i 2**2
'''

# 11 001 100 -> 011 001 100 
if len(n) % 3 == 2:
    n = '0' + n
    m = (len(n) + 1) // 3
elif len(n) % 3 == 1:
    n = '00' + n
    m = (len(n) + 2) // 3
else:
    n = n
    m = len(n) // 3

'''011(3) 001(1) 110(4)'''

for i in range(m):
    result = 0
    result += int(n[0+3*i]) * (2**2)
    result += int(n[1+3*i]) * (2**1)
    result += int(n[2+3*i]) * (2**0)
    print(result, end="")

 

 

그런데 다른분들이 어떻게 푸셨나 살펴보니....

 

내장함수가 있다한다...

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

한줄이면 끝나는거였다니..!

 

코드를 설명과 출력형태은 다음과 같다

int(input(),2)  # 2진수로 숫자 받음
oct(int(input(),2))  # 8진수로 변환 0o(8진수)형태
oct(int(input(),2))[2:] # 0o(8진수)로 나와서 [2:]로 슬라이싱

 

나의 코드와 시간차이는 다음과 같다

1373_2진수8진수.py
0.00MB