Algorithm/백준

[BOJ] 2998 - 8진수

비번변경 2022. 6. 8. 14:34

문제

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

창영이는 2진법 수를 8진법 수로 변환하려고 한다. 창영이가 사용한 방법은 아래와 같다.

1. 2진수의 길이가 3으로 나누어 떨어질 때까지 수의 앞에 0을 붙인다.
2. 그 다음, 3자리씩 그룹을 나눈다.
3. 아래의 표를 참고해 8진수로 바꾼다.

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

창영이가 사용한 방법을 이용해 2진수를 입력받아 8진수를 바꾸는 프로그램을 작성하라.

입력의 첫번째 줄에 2진수가 주어진다.

 

 

풀이

Python에서 2진수를 입력받는 방법과 정수를 8진수를 변환하는 방법을 알면 간단하게 해결할 수 있다.

1. int(x, base=10)

int 함수의 base는 x의 진수에 해당하며 기본값은 10이다. 따라서 2진수를 입력받을 때는 아래와 같은 형태로 사용할 수 있다.

int(sys.stdin.readline(), 2)

# 예시
print(int(sys.stdin.readline(), 2))

print(int(sys.stdin.readline(), 2))

출력은 10진수로 출력된다.

 

2. bin(), oct(), hex()

각 함수는 입력받은 숫자를 2진수, 8진수, 16진수 형태의 문자열로 변환한다.

bin(10)
oct(10)
hex(10)

 

위 2개의 함수를 조합하여 아래와 같은 코드로 문제를 해결했다.

import sys

print(oct(int(sys.stdin.readline(), 2))[2:])

숫자값만 나타낼 수 있도록 앞의 두 자리는 제외하고 출력한다.

 

 

참고 문서

https://docs.python.org/ko/3/library/stdtypes.html

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