-
Python 16,2,8진수에서 10진수 변환,10진수에서 16,2,8진수(진수 변환)프로그래머스문제정리 & Python잡다한것 2020. 9. 14. 11:20728x90반응형
1. 내가 생각한 코드
무식한 방법이지만 단순히 변환하는 알고리즘을 짜야하는 줄 알고 스스로 코드를 작성해 보았다.
1234567891011121314151617181920212223import syssixt_num = sys.stdin.readline()result = 0index = len(sixt_num)-2for i in range(0,len(sixt_num)-1):if sixt_num[i] =='A':result += 10*(16**index)elif sixt_num[i] =='B':result += 11*(16**index)elif sixt_num[i] =='C':result += 12*(16**index)elif sixt_num[i] =='D':result += 13*(16**index)elif sixt_num[i] =='E':result += 14*(16**index)elif sixt_num[i] =='F':result += 15*(16**index)else :result += int(sixt_num[i])*(16**index)index -= 1print(result)cs 내가 생각해도 너무 지저분한 코드인 것 같았다. 또한 코드 실행시간도 너무 오래걸렸다. 백준 기준으로 64ms인데, 이는 너무 긴 시간이다.
그래서 Python에서는 어떤 식으로 변환하는 지 찾아 보았다.
2. 더 간결한 코드 16, 2, 8 진수에서 10 진수로 변경하기
1234567import sysnum = sys.stdin.readline().rstrip()print(int(num,16))print(int(num,2))print(int(num,8))cs 각각 num에 해당하는 진수의 값을 넣으면 빠르게 10진수로 변환 되는 것을 알 수 있다.
ex)
a = '0b1010'
b = '0o10'
c = '0x3f6'
같이 표기된 진수 표현을 10진수로 바꾸는 방법
3. 반대로 10진수를 16, 2, 8진수로 변경하기
123456789import sysnum = int(sys.stdin.readline())binary = bin(num)octal = oct(num)hexadecimal = hex(num)print(binary)print(octal)print(hexadecimal)cs
4. 8진수 입력을 2진수로 출력하기
우선 그냥 입력에서는 str 객체이기 때문에 '0o' 를 붙혀준다. (16진수 : 0x, 2진수 : 0b)
그 후, 2가지 방법으로 2진수 출력을 할 수 있다.
1. bin()함수 : 0b까지 전부 나옴
2. format() : 0b를 제외한 부분 나옴(b 앞에 #을 붙히면 bin()과 동일하게 나옴)
5. 정리
1. 10진수를 2, 8, 16진수로 변환하기 : 10진수가 num이라고 했을때 각각 bin(num), oct(num), hex(num(
2. 10진수를 2, 8, 17진수로 format()사용 :
2-1)format(num,'b'), format(num,'o'),format(num,'x')
2-2)format(num,'#b'),format(num,'#o'),format(num,'#x')
3. 2, 16, 8 진수를 10진수로 : int(num, 2), int(num, 8), int(num, 16)
(입력 num(str) -> 2진수 : '101010', 8진수 : '314' , 16진수 : '30')
반응형'프로그래머스문제정리 & Python잡다한것' 카테고리의 다른 글
Python numpy 함수 np.dot() 가 동작하는 내부 원리 (0) 2021.05.19 가장 큰 수 - 프로그래머스[Level 2], 코드 비교하기 (0) 2021.05.13 Python ASCII 값 출력하기 (백준 11654) (0) 2020.12.31 Python 입력- readline함수(코딩테스트) (0) 2020.09.14 Django 프로젝트 시작(Local Server 열기, 가상환경 설치) (0) 2020.09.06