문제풀이/BOJ
[Python] BOJ/백준 1373번 2진수 8진수
서채리
2021. 7. 10. 14:36
[문제]
https://www.acmicpc.net/problem/1373
1373번: 2진수 8진수
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
www.acmicpc.net
[풀이]
1) 첫 번째 제출 코드
input을 [::-1]을 이용해 거꾸로 받아 n에 저장한다.
n을 3개씩 슬라이싱한 len()이 2이면 '0'을 추가, 1이면 '00'을 더한다.
그 후 자릿수에 맞게 곱하고 더해서 8진수 octal을 구한 후 str()로 문자열화 해 result에 추가한다.
마지막에 result를 거꾸로 출력한다.
2) 두 번째 수정 코드
int()는 인자가 두 개가 들어갈 수 있는 함수이다. int(input(), 2)의 경우 input을 2진수로 인식해준다. 인자의 default는 10이기 때문에 인자 값을 따로 입력하지 않을 경우에는 10진수로 인식한다.
print(oct(int(input(), 2))[2:])
따라서 위 코드는 입력을 2진수로 인식해 받고 그 수를 파이썬 내장함수 oct()를 이용해 8진수로 바꾼다. oct()를 이용해 8진수로 바꿀 경우 맨 앞에 해당 수가 8진수임을 알려주는 '0o'가 붙는데 이를 [2:]를 이용해 없애고 출력한다.
수정 코드를 이용하면 시간이 엄청 절약된다.
[코드]
- 첫 번째 제출 코드
if __name__ == '__main__':
n = input()[::-1]
result = ''
for i in range(0, len(n), 3):
piece = n[i:i+3]
if len(piece) == 2:
piece += '0'
elif len(piece) == 1:
piece += '00'
octal = int(piece[0]) * 1 + int(piece[1]) * 2 + int(piece[2]) * 4
result += str(octal)
print(result[::-1])
- 두 번째 수정 코드
if __name__ == '__main__':
print(oct(int(input(), 2))[2:])