Algorithm/BOJ

[백준] 1373 2진수 8진수 (파이썬 python)

YOONJELLY 2022. 1. 25. 23:33

 

 

문제 링크

 

 

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

 

1373번: 2진수 8진수

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

www.acmicpc.net

 

 

 

문제

 

 

 

 

 

문제 풀이

 

 

처음에 제출했던 코드는 아래와 같다.

 

n = input()[::-1]
convert10 = 0
result = ""
for i in range(len(n)):
    convert10 += int(n[i]) * (2 ** i)
while convert10 != 0:
    result += convert10 % 8
    convert10 //= 8
print(result[::-1])

 

이렇게 직접 2진수를 10진수로 변환하고, 그것을 다시 8진수로 변환하는 코드를 짜서 제출했는데

수정을 계속 해도 시간 초과가 떴다.

 

결국 구글링을 통해 해결법을 찾아보니 정말 간단한 내장함수가 존재했다.

 

 

# 정답 코드

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

 

 

int()의 두 번째 인자는 진법을 나타낸다.

즉, int(input(), 2)는 숫자를 2진법으로 입력받는다는 것을 의미한다.

oct()는 8진법으로 숫자를 변환하는 함수이다.

[2:]을 해주는 이유는 10진법이 아닌 8진법으로 변환을 진행했기 때문에

8진법임을 나타내는 0o가 숫자의 앞에 나타나는데

출력 예시에 그것이 나타나있지 않으므로 그것을 지우기 위해 3번째 글자부터 출력하는 것이다.