티스토리 뷰


문제

 

1373번: 2진수 8진수

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

www.acmicpc.net


풀이

1. 10진수 -> 2, 8, 16진수 변환

파이썬에는 쉽게 진수 변환을 시켜주는 내장 함수들이 있다.

print('10진수 -> 2진수: {}'.format(bin(10)))
print('10진수 -> 8진수: {}'.format(oct(10)))
print('10진수 -> 16진수: {}'.format(hex(10)))

 

 

여기서 앞의 접두어들을 제외시켜 주려면, 

[2:]를 붙여 세번째 인덱스부터 출력을 시켜 주는 방법도 있고 

format을 이용할 수도 있다.

겉으로 감싸진 format은 print를 하기 위함이고 내부의 format을 보면 됨.

 

print('10진수 -> 2진수: {}'.format(
    format((int(10)), 'b')
    ))
print('10진수 -> 8진수: {}'.format(format((int(10)), 'o')))
print('10진수 -> 16진수: {}'.format(format((int(10)), 'x')))

 

 

2. 2, 8, 16진수 -> 10진수 변환

간단히 int를 붙이면 된다. 참고로 int의 두번째 인자 default 값은 10진수라는 뜻으로 10 이다.

첫번째 인자는 문자열임을 명시해야 한다.

 

print('2진수 -> 10진수: {}'.format(int('1010', 2)))
print('8진수 -> 10진수: {}'.format(int('12', 8)))
print('16진수 -> 10진수: {}'.format(int('a', 16)))

 

 

이를 이용해서 위의 문제를 풀려면, 

우선 받은 2진수를 10진수로 변환 후 8진수로 다시 변환시켜야 한다.

변환된 8진수 앞에는 8진수임을 알리는 접두어가 있기 때문에 해당 접두어를 제외하고 출력한다.

 

# 접두어 제외하고 출력하는 방식 두 가지. 둘 중에 하나를 선택하세요.

print(oct(int(input(), 2))[2:])	
print(format((int(input(), 2)), 'o'))

참고:

www.daleseo.com/python-int-bases/

duwjdtn11.tistory.com/512

반응형
댓글