JB의 이모저모

진수 변환 (Python) 본문

알고리즘/공부

진수 변환 (Python)

J B 2023. 9. 14. 12:13

※파이썬 문제를 풀다보면 2진수로 변환하여 문제를 해결하는 경우가 종종 있다. 그런 경우에는 bin()함수를 이용하여 문제를 해결하였다.

그런데 2진수가 아니라 8진수 16진수 혹은 3진수 이런 문제가 나오면 풀 자신이 없어서 공부할 겸 기록을 남긴다.

 

n진수 → 10진수

int() 함수를 사용

int(string,base)

위와 같은 형식으로 사용 base에는 진법을 넣는다.

print(int('111',2))
print(int('111',3))
print(int('111',6))
print(int('ACF',16))
7
13
43
2767

※ 주의

print(int(111,2))
TypeError: int() can't convert non-string with explicit base

위와 같이 string 대신 int형식으로 넣는다면 타입에러가 발생한다.

 

 

10진수 → 2, 8, 16진수

2, 8, 16진수는 함수를 지원한다.

2진수 : bin()

8진수 : oct()

16진수 : hex()

print(bin(10))
print(oct(10))
print(hex(10))

10을 2,8,16진수로 변환하면

0b1010
0o12
0xa

위와같이 나타나는데 0b는 2진수, 0o는 8진수, 0x는 16진수를 의미한다. 앞의 진법 표시를 지우고 싶으면 인덱싱을 사용

print(bin(10)[2:])
print(oct(10)[2:])
print(hex(10)[2:])
1010
12
a

 

10진수 → n진수

import string

all = string.digits + string.ascii_lowercase

def sol(num, base):
    x, y = divmod(num, base)
    if x == 0:
        return all[y]
    else:
        return sol(x, base) + all[y]

print(sol(10,2))
print(sol(10,3))
print(sol(10,4))
print(sol(10,5))
1010
101
22
20

 

 

'알고리즘 > 공부' 카테고리의 다른 글

LIS(가장 긴 증가하는 부분 수열)  (0) 2023.09.27
Knapsack Problem (Python)  (0) 2023.09.21