파이썬 백준 1373번
브론즈1
https://www.acmicpc.net/problem/1373
문제 보기
분류: 수학 문자열
문제 풀기
2진수를 3자리씩 묶어 8진수로 변환하는 방법을 사용하였다.
https://www.rapidtables.com/convert/number/binary-to-octal.html
입력받은 2진수를 문자로 리스트에 저장하고 이를 3개씩 꺼내어 그 2진수 자리에 상응하는 1, 2, 4 를 곱하고 더하여 8진수를 각각 형성한다. 이 합을 매번 빈 리스트에 저장하여 출력하였다.
코드 보기
import sys
inputdata = sys.stdin.readline
def fnBinaryToOctalNumber(binary_number):
## 입력받은 2진수의 길이를 저장
b_len = len(binary_number)
# num_ls = [0] * 1_000_000 # 런타임 에러 (IndexError)
## 0으로 초기화된 빈 리스트를 생성
## 2진수를 3개씩 끊어 활용을 하기 위해 빈 공간을 채울 +3을 추가함.
num_ls = [0] * (b_len + 3)
## 입력받은 2진 문자를 빈 리스트 num_ls의 낮은 자리부터 index 앞쪽에 저장
i = b_len - 1
for b in binary_number:
num_ls[i] = b
i -= 1
print(num_ls) # test print
## 3개씩 묶어 for loop을 돌리는데 loop 횟수 문제를 해결하기 위해 조건에 따라 달리함
if b_len % 3 == 0:
floop = b_len // 3
elif b_len % 3 != 0:
floop = b_len // 3 + 1
## 8진수를 저장할 octal_ls를 만듬
## 3개씩 묶음의 자릿수에 따라 2 -> 8 변환시 1, 2, 4를 곱해줌
## 그리고 그 합을 octal_ls 에 순차적으로 저장
octal_ls = []
for j in range (floop):
o_sum, o8, o88, o888 = 0, 0, 0, 0
o8 = 1 * int(num_ls[j * 3])
o88 = 2 * int(num_ls[j * 3 + 1])
o888 = 4 * int(num_ls[j * 3 + 2])
o_sum = o8 + o88 + o888
octal_ls.append(o_sum)
print(octal_ls) # test print
return octal_ls
if __name__ == "__main__":
## 입력 숫자를 문자로 변환하여 입력 받음. 빈 리스트를 생성하여 순서를 뒤바꿔 저장할 예정
binary_number = str(inputdata().strip())
## 2진->8진 변환 함수를 들어갔다온 결과를 순서에 맞게 출력
result = fnBinaryToOctalNumber(binary_number)
for i in range (len(result), 0, -1):
print(result[i - 1], end='')
# 11001100
# ['0', '0', '1', '1', '0', '0', '1', '1', 0, 0, 0]
# [4, 1, 3]
# 314
추가 하기
숫자를 분할하여 리스트에 저장하는 것을 자꾸 간과하는것 같다. 정답을 제출하고 나니 왜 돌아갔을까 생각함.
list (map (int, str (number))
import sys
inputdata = sys.stdin.readline
ls = list(map(int, str(inputdata()).strip()))
print(ls)
# 123
# [1, 2, 3]
[int (i) for i in str(number)]
import sys
inputdata = sys.stdin.readline
ls = [int(i) for i in str(inputdata().strip())]
print(ls)
# 123
# [1, 2, 3]
'공부하기 > 백준' 카테고리의 다른 글
[Python] 백준 풀기 14935 - FA (0) | 2022.11.26 |
---|---|
[Python] 백준 풀기 5063 - TGN (0) | 2022.11.25 |
[Python] 백준 풀기 10569 - 다면체 (0) | 2022.11.23 |
[Python] 백준 풀기 1946 - 신입 사원 (0) | 2022.11.22 |
[Python] 백준 풀기 13023 - ABCDE (0) | 2022.11.21 |