https://www.acmicpc.net/problem/1373
1373번: 2진수 8진수
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
www.acmicpc.net
2진수를 세자리씩 끊으면 8진수가 완성되는 것을 활용해서
입력받은 값의 길이가 3의 배수가 아니면 앞에 '0'을 필요한 만큼 채워주고
각자리마다 값을 곱해서 붙여주었다
import sys
n = str(sys.stdin.readline().rstrip())
'''
n[0] n[3] 0+3*i 2**0
n[1] n[4] 1+3*i 2**1
n[2] n[5] 2+3*i 2**2
'''
# 11 001 100 -> 011 001 100
if len(n) % 3 == 2:
n = '0' + n
m = (len(n) + 1) // 3
elif len(n) % 3 == 1:
n = '00' + n
m = (len(n) + 2) // 3
else:
n = n
m = len(n) // 3
'''011(3) 001(1) 110(4)'''
for i in range(m):
result = 0
result += int(n[0+3*i]) * (2**2)
result += int(n[1+3*i]) * (2**1)
result += int(n[2+3*i]) * (2**0)
print(result, end="")
그런데 다른분들이 어떻게 푸셨나 살펴보니....
내장함수가 있다한다...
print(oct(int(input(),2))[2:])
한줄이면 끝나는거였다니..!
코드를 설명과 출력형태은 다음과 같다
int(input(),2) # 2진수로 숫자 받음
oct(int(input(),2)) # 8진수로 변환 0o(8진수)형태
oct(int(input(),2))[2:] # 0o(8진수)로 나와서 [2:]로 슬라이싱
나의 코드와 시간차이는 다음과 같다
'공부 > 알고리즘' 카테고리의 다른 글
[알고리즘][백준] 17103번 골드바흐 파티션 - 파이썬(python) 풀이 (0) | 2024.03.03 |
---|---|
[알고리즘][백준] 2089번 -2진수 - 파이썬(python) 풀이 (0) | 2024.03.03 |
[알고리즘][백준] 17087번 숨바꼭질 6 - 파이썬(python) 풀이 (2) | 2024.03.01 |
[알고리즘][백준] 9613번 GCD 합 - 파이썬(python) 풀이 (1) | 2024.02.29 |
[알고리즘][백준] 2004번 조합 0의 개수 - 파이썬(python) 풀이 (0) | 2024.02.29 |