JB의 이모저모
진수 변환 (Python) 본문
※파이썬 문제를 풀다보면 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 |