문제

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

www.acmicpc.net/problem/1373

  • 입력

첫째 줄에 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

이 문제도 간단한 문제지만 내장함수를 이용하면 한 줄로 줄일 수 있다. 쉬워보이는 문제에도 이렇게 배울 것이 있다!

  1. int(input(), n) input으로 받은 입력이 n진수라는 것을 알려준다.

  2. n진수로 변환하기 2진수, 8진수, 16진수로 변환하는 함수는 각각 bin, oct, hex이다

  3. 출력하기 변환된 n진수는 n진수임을 나타내주는 접두어를 갖고 있으므로 [2:]로 슬라이싱해서 접두어를 없애고 출력한다.

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

참고 사이트