진법이란 무엇일까요?
진법이란 수를 표기하는 기수법의 하나로 몇 개의 기본 숫자를 이용하여 수를 표시하는 방법이다.
자리값이 올라감에 따라 수가 일정하게 커지는 규칙을 이용하고 수를 표시한다. 아라비아 숫자에 해당하는 1~9까지의 숫자를 사용하여 수를 나타내는 방식을 10진법이라고 하고 프로그래밍 영역에서는 2진법, 8진법, 16진법이 존재한다.
모든 진법은 숫자의 위치에 따라 가중치가 달라진다. 아래 그림을 보자.
예를들어 `12345 = (1 \times 10^4)+(2 \times 10^3)+(3 \times 10^2)+(4 \times 10^1)+(5 \times 10^0)`와 같은것이다.
주의깊게 봐야하는 부분은 각 진법간의 변환인데, 차례대로 알아보자.
10진수를 `N`진수로 변환하는 방식을 알아보자.
바꾸고 싶은 진수의 숫자로 더 이상 나눌 수 없을 때까지 나눈 뒤 역순으로 읽으면 된다.
그렇다면 반대로 `N`진수를 10진수로 바꾸는 방법은 무엇일까?
가장 위에서 보았던 위치의 가중치를 지수로 하여 해당 진법의 거듭제곱으로 각 위치에 해당하는 숫자를 곱해서 더해주면 된다. 파이썬에서는 위에서 언급한 2진수, 8진수, 16진수, 10진수는 내장함수로 구현되어 있으나 타 진법에 대해서는 구현되어있지 않다. 그러므로 직접 함수를 구현해야 한다.
# 10진수 -> n진수
def convert_notation(n, base):
T = "0123456789ABCDEF"
q, r = divmod(n, base)
return convert_notation(q, base) + T[r] if q else T[r]
# n진수 -> 10진수
def convert_to_decimal(n, base):
decimal = 0
for idx, val in enumerate(str(n)[::-1]):
decimal += (base ** idx) * int(val)
return decimal
# 10진수
int()
# 2진수
bin()
# 8진수
oct()
# 16진수
hex()
'알고리즘 & 코딩테스트 > 알고리즘 공부' 카테고리의 다른 글
약수의 개수와 최대공약수, 최소공배수 (Count of Divisor & GCD, LCM) (0) | 2023.06.01 |
---|---|
소수와 소인수 분해 (Prime Number, Prime Factorization) (0) | 2023.05.27 |