알고리즘/백준

[Python] 백준 1212번 - 8진수 2진수

번잔중 2022. 3. 28. 22:16
 

1212번: 8진수 2진수

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

www.acmicpc.net

문제

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

 

입력

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

 

출력

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

* 내가 짠 코드

n = list(map(int, input()))
bi_n = 0
bi_list = []

for i in range(len(n)):
    bi_n += (n[i] * (8 ** (len(n) - i - 1)))

while bi_n != 0:
    bi_list.append(str(bi_n % 2))
    bi_n //= 2

bi_list.reverse()
print("".join(bi_list))

우선 입력을 10진수 형태로 받고 8진수 형태로 변환해주었습니다. 자릿수별로 거듭제곱한 수를 곱한 값들을 전부 더해서 저장하는 방법입니다. 이후 2진수로 바꾸기 위해 2로 나눈 나머지를 저장하는 while문을 작성하고 거꾸로 출력하여 완성했습니다.

 

하지만 파이썬에는 내장함수로 bin, oct, hex와 같은 2, 8, 16진수 변환을 도와주는 함수가 있었네요. 왜 진작 알지 못했을까 조금은 서운한 마음을 뒤로 하고 내장함수를 사용해서 한줄만에 해결한 분들의 코드도 가져왔습니다. 아래 코드를 사용하시는 것이 정신적, 신체적으로도 쾌적한 삶을 영위하실 수 있을 것 같습니다.

 

* 천재들의 내장함수를 사용한 코드

print(bin(int(input(), 8)) [2:])

8진수 형태의 입력된 값을 2진수로 변환한 후 bin(숫자) 형태의 결과값이 0b11001100의 형태로 나오는 것을 감안해서 3번째 인덱스부터 출력할 수 있도록 슬라이스를 사용했습니다. 아주 쿨하네요.

 

세상에는 잘난 사람들이 너무 많다는 것을 다시 한번 느끼게 되는 하루입니다.

태클은 언제나 환영합니다.

 

감사합니다.