문제
2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.
- 입력
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
- 출력
첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.
최종 코드
2진수를 뒤에서부터 3자리씩 묶어서 8진수로 변환하였다.
n = list(reversed(list(input())))
res = []
for i in range(0, len(n), 3):
if i == len(n)-1:
tmp = int(n[i])
elif i == len(n)-2:
tmp = int(n[i]) + int(n[i+1])*2
else:
tmp = int(n[i]) + int(n[i+1])*2 + int(n[i+2])*4
res.append(str(tmp))
print("".join(res[::-1]))
Enhanced
이 문제도 간단한 문제지만 내장함수를 이용하면 한 줄로 줄일 수 있다. 쉬워보이는 문제에도 이렇게 배울 것이 있다!
-
int(input(), n) input으로 받은 입력이 n진수라는 것을 알려준다.
-
n진수로 변환하기 2진수, 8진수, 16진수로 변환하는 함수는 각각
bin
,oct
,hex
이다 -
출력하기 변환된 n진수는 n진수임을 나타내주는 접두어를 갖고 있으므로 [2:]로 슬라이싱해서 접두어를 없애고 출력한다.
print(bin(int(input(), 8))[2:])
참고 사이트
- [파이썬] 백준 - 1373: 2진수 8진수 jae04099.tistory.com/195