Notice
Recent Posts
Recent Comments
Link
꾸준하게 거북이처럼
백준 1373번: 2진수 -> 8진수 변환 - 파이썬 본문
1373번: 2진수 8진수
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
www.acmicpc.net
처음에는 입력받은 2진수를 10진수로 변환하고, 다시 8진수로 변환하는 방법을 썼더니, 시간 초과가 나왔다.
다시 입력 받은 2진수를 뒤에서 부터 3자리씩 묶어서 8진수로 바로 변환해봤지만 역시나,, 시간 초과.
직접 변환 코드
bi = input()
countZero = len(bi) % 3
bi = ('0'*countZero) + bi
ans = ""
for i in range(len(bi)-1, 0 , -3):
a = int(bi[i]) * 1 + int(bi[i - 1]) * 2 + int(bi[i - 2]) * 4
ans += str(a)
print(ans[::-1])
입력 받은 수의 최대 자리수가 100만이고, for 문 안에 str, int 내장 함수를 사용! str()의 시간 복잡도는 O(logN)이다. 그래도 시간 제한내에 연산횟수가 나오는 걸로 예상했는데,, (logN)^2 *N 이여서 그런지 시간 초과가 나온다.
사실 파이썬에서는 oct라고 8진수로 변환을 해주는 내장 함수가 있다.
ex) oct(0b11001100) -> 0o314 가 반환됨.
따라서 내장함수를 이용해서 앞에 '0o'만 제외하고 print하기만 하면 된다.
수정 코드
print(oct(int(input(),2))[2:])
배운 것: int()에 ,를 찍고 뒤에 숫자를 넣으면 그 진법의 숫자를 받는다는 것
'Algorithm 문제 & 공부' 카테고리의 다른 글
백준 2110 파이썬 - 공유기 설치 (0) | 2022.12.25 |
---|---|
백준 2089번 -2진수 - 파이썬 (0) | 2022.07.29 |
백준 2004번 조합 0의 개수 - 파이썬 (0) | 2022.07.26 |
백준 6588번 파이썬 feat.에라토스테네스의 체 (0) | 2022.07.24 |
GCD - 유클리드 알고리즘 (0) | 2022.07.23 |
Comments