8진수 2진수
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1 초 | 256 MB | 40357 | 13535 | 11213 | 35.763% |
문제
8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
출력
첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.
예제 입력 1
314
예제 출력 1
11001100
풀이
1) 파이썬 내장함수 사용
print(bin(int(input(), 8))[2:])
2) 시간 초과
eight = ["000","001","010","011","100","101","110","111"]
s = input()
start = True
ans = ''
if s == '0':
ans = '0'
for ch in s:
n = ord(ch)-ord('0')
if start and n < 4:
if n == 0:
continue
elif n == 1:
ans += '1'
elif n == 2:
ans += '10'
elif n == 3:
ans += '11'
start = False
else:
ans += eight[n]
start = False
print(ans)
eight
: 8진수를 2진수로 변환할 때 사용하는 미리 정의된 문자열 리스트입니다. 인덱스가 8진수를 나타내고, 값이 해당 8진수를 3자리 이진수로 변환한 값입니다.
s = input()
: 사용자로부터 8진수를 입력받아 변수s
에 저장합니다.
start = True
: 첫 번째 숫자 여부를 나타내는 플래그 변수입니다. 변환하는 도중 첫 번째 숫자를 처리할 때는 앞의 불필요한 0을 제거해야 하므로 이 변수를 사용합니다.
ans = ''
: 변환된 2진수를 저장하는 빈 문자열입니다.
if s == '0':
입력받은 8진수가 '0'이라면, 그대로 2진수 '0'으로 출력하고 종료합니다.
for ch in s:
입력받은 8진수의 각 문자(숫자)에 대해 반복문을 실행합니다.
n = ord(ch) - ord('0')
: 현재 8진수 문자를 정수로 변환합니다.ord()
함수ord()
함수는 파이썬 내장 함수로, 주어진 문자를 해당하는 유니코드 코드 포인트(정수)로 변환해줍니다. 간단히 말해, 문자를 그에 해당하는 숫자 값으로 변환하는 함수입니다.예를 들어, 다음과 같이 사용할 수 있습니다:
print(ord('A')) # 출력: 65 print(ord('Z')) # 출력: 90 print(ord('a')) # 출력: 97 print(ord('z')) # 출력: 122 print(ord('0')) # 출력: 48 print(ord('9')) # 출력: 57
문자열에서 각 문자의 정수 값을 얻기 위해
ord()
함수를 사용할 수 있으며, 이를 통해 문자열에서 특정 숫자 또는 문자를 조작하거나 비교하는 데 활용할 수 있습니다.이전에 제공한 코드에서
n = ord(ch) - ord('0')
부분은 현재 8진수 문자를 해당하는 정수 값으로 변환하는 데 사용되었습니다. 예를 들어 '2' 문자의 경우,ord('2')
는 50이고ord('0')
는 48이므로50 - 48 = 2
로 정수 2로 변환됩니다.
if start and n < 4:
만약 현재 숫자가 첫 번째 숫자이고 값이 4 미만이라면, 앞에 불필요한 0을 제거합니다.n == 0
: 첫 번째 숫자가 0이라면 아무 것도 추가하지 않고 건너뜁니다.
n == 1
: 첫 번째 숫자가 1이라면, '1'을 추가합니다.
n == 2
: 첫 번째 숫자가 2라면, '10'을 추가합니다.
n == 3
: 첫 번째 숫자가 3이라면, '11'을 추가합니다.
- 처리가 끝나면
start = False
로 설정하여 다음 숫자부터는 이 로직을 건너뜁니다.
start 변수 사용 이유
start
변수는 코드에서 첫 번째 숫자를 처리할 때와 그 이후의 숫자를 처리할 때를 구분하기 위한 플래그 변수입니다. 이 변수를 사용하는 이유는 첫 번째 숫자에 대해서만 앞에 불필요한 0을 제거해야 하기 때문입니다.처음에
start
변수는True
로 설정되어 있습니다. 이렇게 함으로써 첫 번째 숫자가 처리되는 경우에만if start and n < 4:
조건문 내의 로직이 실행되게 됩니다.첫 번째 숫자를 처리한 후에는
start = False
로 설정합니다. 이렇게 하면 다음 반복부터는 첫 번째 숫자와 관련된 로직이 실행되지 않고else:
절로 넘어가게 됩니다. 이else:
절에서는 해당하는 이진수 문자열을 직접ans
문자열에 추가하는 것으로 처리합니다.요약하자면,
start = False
로 설정하는 이유는 다음과 같습니다:- 첫 번째 숫자를 처리한 후에는 불필요한 0을 제거할 필요가 없기 때문에, 이후 처리 과정에서 첫 번째 숫자와 관련된 로직을 건너뛰기 위함입니다.
- 첫 번째 숫자 처리와 관련된 로직이 한 번만 실행되도록 하기 위함입니다.
else:
첫 번째 숫자가 아닌 경우, 정수n
을 이용하여eight
리스트에서 해당하는 이진수 문자열을 찾아ans
에 추가합니다.
print(ans)
: 모든 숫자를 처리한 후 변환된 2진수를 출력합니다.
Uploaded by N2T
'Algorithm' 카테고리의 다른 글
슬라이싱 (0) | 2023.04.12 |
---|---|
[백준 2089 파이썬/python] -2진수 (0) | 2023.04.12 |
[백준 17103 파이썬/python] 골드바흐 파티션 (0) | 2023.04.12 |
[백준 2089 파이썬/python] -2진수 (0) | 2023.04.12 |
[백준 1212 파이썬/python] 8진수 2진수 (0) | 2023.04.12 |