파이썬 백준 1373번
브론즈1
https://www.acmicpc.net/problem/1373
1373번: 2진수 8진수
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
www.acmicpc.net
문제 보기

분류: 수학 문자열
문제 풀기

2진수를 3자리씩 묶어 8진수로 변환하는 방법을 사용하였다.
https://www.rapidtables.com/convert/number/binary-to-octal.html
Binary to Octal Converter
From Binary Decimal Octal Hexadecimal Text To Binary Decimal Octal Hexadecimal Text
www.rapidtables.com
입력받은 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 |