본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Silver 5][Python] 2998번 : 8진수

by 빛밤하늘 2021. 5. 12.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

2998번: 8진수

창영이는 여러 가지 진법을 공부하고 있다. 창영이는 어제 2진법을 배웠고, 오늘은 8진법을 배웠다. 이제, 2진법 수를 8진법 수로 변환하려고 한다. 창영이가 사용한 방법은 다음과 같다. 2진수의

www.acmicpc.net

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin

# 2진수 3자리를 8진수로 바꾸는 방법을 저장하고 있는 dictionary 변수를 선언합니다.
bin_to_oct_dict = {
    '000': 0,
    '001': 1,
    '010': 2,
    '011': 3,
    '100': 4,
    '101': 5,
    '110': 6,
    '111': 7
}

# 첫째 줄에 2진수를 입력합니다.
# 100자리 이내이고, 첫 번째 자리는 1입니다.
bin_num = stdin.readline().rstrip()
# 입력한 2진수의 길이를 저장하는 변수입니다.
bin_num_len = len(bin_num)

# 2진수의 길이를 3으로 나누었을 때 나머지가 1이라면
if bin_num_len % 3 == 1:
    # 앞에 00을 붙여줍니다.
    bin_num = '00' + bin_num
# 2진수의 길이를 3으로 나누었을 때 나머지가 2라면
elif bin_num_len % 3 == 2:
    # 앞에 0을 붙여줍니다.
    bin_num = '0' + bin_num

# 2진수의 길이를 다시 초기화해줍니다.
bin_num_len = len(bin_num)

# 2진수를 8진수로 바꾼 뒤의 결과를 저장할 변수를 선언합니다.
oct_num = ''

# 2진수를 3자리씩 끊어서 반복해봅니다.
for idx in range(0, bin_num_len, 3):
    # 2진수의 세 자리를 8진수로 바꿔 저장하는 변수를 선언합니다.
    one_oct_num = bin_to_oct_dict[bin_num[idx:idx+3]]
    # one_oct_num을 문자열로 변환해 oct_num에 넣어줍니다.
    oct_num += str(one_oct_num)

# 2진수를 8진수로 바꾼 결과를 출력합니다.
print(oct_num)

결과

 

파이썬에는 2진수, 8진수, 10진수로 바꿀 수 있는 내장 함수인 bin, oct, int가 있습니다.

이번에는 위의 내장 함수를 사용하지 않고, 문제의 내용에 따라 구현해봤습니다.

 

첫 번째로 제출할 때는 2진수에 0이나 00을 붙인 뒤에 길이를 다시 한 번 초기화해주지 않고 

반복문을 돌려 틀렸습니다 결과가 나왔습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글