문제풀이/BOJ

[Python] BOJ/백준 1373번 2진수 8진수

서채리 2021. 7. 10. 14:36

[문제]

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

 

1373번: 2진수 8진수

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

www.acmicpc.net

 


[풀이]

1) 첫 번째 제출 코드

input을 [::-1]을 이용해 거꾸로 받아 n에 저장한다.

n을 3개씩 슬라이싱한 len()이 2이면 '0'을 추가, 1이면 '00'을 더한다.

그 후 자릿수에 맞게 곱하고 더해서 8진수 octal을 구한 후 str()로 문자열화 해 result에 추가한다.

마지막에 result를 거꾸로 출력한다.

 

2) 두 번째 수정 코드

int()는 인자가 두 개가 들어갈 수 있는 함수이다. int(input(), 2)의 경우 input을 2진수로 인식해준다. 인자의 default는 10이기 때문에 인자 값을 따로 입력하지 않을 경우에는 10진수로 인식한다.

 

print(oct(int(input(), 2))[2:])

 

따라서 위 코드는 입력을 2진수로 인식해 받고 그 수를 파이썬 내장함수 oct()를 이용해 8진수로 바꾼다. oct()를 이용해 8진수로 바꿀 경우 맨 앞에 해당 수가 8진수임을 알려주는 '0o'가 붙는데 이를 [2:]를 이용해 없애고 출력한다.

 


수정 코드를 이용하면 시간이 엄청 절약된다.

 

 

[코드]

- 첫 번째 제출 코드

if __name__ == '__main__':
    n = input()[::-1]

    result = ''
    for i in range(0, len(n), 3):
        piece = n[i:i+3]
        if len(piece) == 2:
            piece += '0'
        elif len(piece) == 1:
            piece += '00'

        octal = int(piece[0]) * 1 + int(piece[1]) * 2 + int(piece[2]) * 4
        result += str(octal)
    print(result[::-1])

 

- 두 번째 수정 코드

if __name__ == '__main__':
    print(oct(int(input(), 2))[2:])