2진수 8진수
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1 초 | 128 MB | 28416 | 11157 | 9185 | 41.056% |
문제
2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.
예제 입력 1
11001100
예제 출력 1
314
풀이
1)
# 입력 받기
binary_num = input()
# 앞에서부터 3자리씩 끊어서 8진수로 변환
binary_num = binary_num.zfill(len(binary_num) + (3 - len(binary_num) % 3) % 3)
octal_num = ""
for i in range(0, len(binary_num), 3):
octal_digit = int(binary_num[i:i+3], 2)
octal_num += str(octal_digit)
# 결과 출력
print(octal_num)
- 풀이과정
- 입력 받기
binary_num = input()
input()
함수를 사용하여 사용자로부터 2진수를 입력받습니다. 입력받은 값은binary_num
변수에 저장됩니다.- 3자리씩 끊어서 처리하기 위한 준비
binary_num = binary_num.zfill(len(binary_num) + (3 - len(binary_num) % 3) % 3)
zfill()
함수를 사용하여 문자열 앞에 필요한 만큼 0을 추가합니다. 이렇게 하면 2진수를 3자리씩 끊어 처리할 때 나머지 부분을 쉽게 처리할 수 있습니다.- 추가설명
마지막에
% 3
을 한 번 더 해주는 이유는 이미 3의 배수인 경우에는 앞에 0을 추가할 필요가 없기 때문입니다.(3 - len(binary_num) % 3) % 3
이 부분을 살펴보면,len(binary_num) % 3
가 3의 배수인 경우(즉, 0인 경우)에는(3 - 0) % 3
이 되어 결과는 0이 됩니다. 이 경우,zfill()
함수에 전달되는 값은 원래 문자열의 길이와 동일하게 되어, 실제로는 앞에 0을 추가하지 않게 됩니다.예를 들어,
binary_num
이 '110100'이라면,len(binary_num)
은 6이고,(3 - len(binary_num) % 3) % 3
는 0입니다. 따라서binary_num.zfill(6)
이 되어 문자열에는 변화가 없고 '110100'이 그대로 유지됩니다.이렇게
% 3
을 한 번 더 해주는 것은, 원래 2진수 문자열의 길이가 이미 3의 배수인 경우에 앞에 0을 추가하지 않기 위한 처리입니다.
- 2진수를 8진수로 변환
octal_num = "" for i in range(0, len(binary_num), 3): octal_digit = int(binary_num[i:i+3], 2) octal_num += str(octal_digit)
for
반복문을 사용하여binary_num
의 길이를 3씩 증가시키면서 인덱스를 만듭니다. 이렇게 하면 2진수를 3자리씩 끊어 처리할 수 있습니다. 그리고int()
함수를 사용하여 2진수를 10진수로 변환한 뒤, 이를octal_num
문자열에 추가합니다.- 결과 출력
print(octal_num)
마지막으로
print()
함수를 사용하여 변환된 8진수를 출력합니다.이러한 단계를 거쳐 주어진 2진수를 8진수로 변환하는 파이썬 코드를 완성할 수 있습니다.
2)
s = input()
n = len(s)
ans = ''
if n%3 == 1:
print(s[0], end='')
elif n%3 == 2:
print((ord(s[0])-ord('0'))*2 + ord(s[1])-ord('0'), end='')
for i in range(n%3, n, 3):
print((ord(s[i])-ord('0'))*4 + (ord(s[i+1])-ord('0'))*2 + (ord(s[i+2])-ord('0')), end='')
- 풀이과정
이 코드는 주어진 2진수를 8진수로 변환하는 또 다른 방법을 구현한 것입니다. 각 부분별로 설명하겠습니다.
- 입력 받기
s = input()
input()
함수를 사용하여 사용자로부터 2진수를 입력받습니다. 입력받은 값은s
변수에 저장됩니다.- 문자열 길이 구하기
n = len(s)
len()
함수를 사용하여 입력받은 2진수 문자열의 길이를 구하고, 이를n
변수에 저장합니다.- 결과를 저장할 변수 초기화
ans = ''
변환된 8진수를 저장할 변수
ans
를 초기화합니다. 여기서는 실제로 사용되지 않았습니다.- 첫 번째 8진수 자릿수 구하기
if n % 3 == 1: print(s[0], end='') elif n % 3 == 2: print((ord(s[0])-ord('0'))*2 + ord(s[1])-ord('0'), end='')
입력받은 2진수 문자열의 길이를 3으로 나눈 나머지에 따라 첫 번째 8진수 자릿수를 구합니다.
- 나머지가 1인 경우: 문자열의 첫 번째 숫자가 첫 번째 8진수 자릿수가 됩니다.
- 나머지가 2인 경우: 문자열의 첫 두 숫자를 계산하여 첫 번째 8진수 자릿수를 구합니다.
print()
함수의end
파라미터를 빈 문자열로 설정하여 줄바꿈 없이 출력합니다.- 나머지 8진수 자릿수 구하기
for i in range(n % 3, n, 3): print((ord(s[i])-ord('0'))*4 + (ord(s[i+1])-ord('0'))*2 + (ord(s[i+2])-ord('0')), end='')
for
반복문을 사용하여 2진수 문자열을 3자리씩 끊어서 처리합니다. 각 3자리를 계산하여 8진수 자릿수를 구하고 출력합니다.ord()
함수를 사용하여 문자열의 각 문자를 ASCII 코드로 변환한 뒤, 해당 자릿수에 맞는 가중치를 곱하여 8진수 값을 계산합니다. 마찬가지로print()
함수의end
파라미터를 빈 문자열로 설정하여 줄바꿈 없이 출력합니다.이 코드를 사용하면 주어진 2진수를 8진수로 변환할 수 있습니다.
Uploaded by N2T
'Algorithm' 카테고리의 다른 글
[백준 2089 파이썬/python] -2진수 (0) | 2023.04.12 |
---|---|
[백준 1212 파이썬/python] 8진수 2진수 (0) | 2023.04.12 |
[백준 17087 파이썬/python] 숨박꼭질 6 (0) | 2023.04.10 |
[백준 9613 파이썬/python] GCD 합 (0) | 2023.04.10 |
[백준 6588 파이썬/python] 골드바흐의 추측 (0) | 2023.04.09 |