프로그래머스문제정리 & Python잡다한것

Python 16,2,8진수에서 10진수 변환,10진수에서 16,2,8진수(진수 변환)

Jay x 2 2020. 9. 14. 11:20
728x90
반응형

1. 내가 생각한 코드

무식한 방법이지만 단순히 변환하는 알고리즘을 짜야하는 줄 알고 스스로 코드를 작성해 보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys
 
sixt_num = sys.stdin.readline()
result = 0
index = len(sixt_num)-2
 
for 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 -= 1 
print(result)     
cs

내가 생각해도 너무 지저분한 코드인 것 같았다.  또한 코드 실행시간도 너무 오래걸렸다. 백준 기준으로 64ms인데, 이는 너무 긴 시간이다.

그래서 Python에서는 어떤 식으로 변환하는 지 찾아 보았다.

 


2. 더 간결한 코드 16, 2, 8 진수에서 10 진수로 변경하기

1
2
3
4
5
6
7
import sys
 
num = 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진수로 변경하기

1
2
3
4
5
6
7
8
9
import sys
num = 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')

 

 

 

 

반응형