03. 세 번째 수업: 인류 최고의 발명, 위치 기수법 (Positional Notation)
만약 10,000배가 커진다고 해서 새로운 문자를 새로 발명하지 않아도 된다면 어떨까요?
아라비아(인도) 숫자는 단 10개의 기호(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)만 가지고도 우주의 별의 개수보다 큰 아득한 숫자를 지면에 단 몇 초 만에 적어버릴 수 있습니다. 인류 역사상 불의 발견에 맞먹는 위대한 지적 혁명, 바로 ‘자리(Position)’에 가치(Power)를 부여한 위치 기수법입니다.
학습 목표
- 같은 ‘3’ 이라는 숫자 모양이라도, 어느 방(자리)에 서 있느냐에 따라 3, 30, 300으로 파워(가중치)가 달라지는 위치 기수법의 마법을 이해합니다.
- 10진법의 자리 올림 가중치를 $\Sigma (a_i \times 10^i)$ 의 덧셈 공식으로 해부합니다.
- 파이썬의 리스트 인덱스 알고리즘(List Index Algorithm)을 이용해 위치 기수법의 수학적 다항식을 파이썬 코드로 번역하고 검증합니다.
1. 모양이 아니라 방(Room)의 계급이 가치를 결정한다
고대 이집트 시절, 막대기 기호 | 는 언제나 $1$의 가치만을 지녔고, 백을 지칭하는 연꽃무늬는 언제나 $100$이었습니다. 이들을 섞어서 쓰든 순서를 바꾸든 그 모양 자체에 가격이 매겨져 있었습니다.
그러나 인도-아라비아 시스템은 무서운 규칙 하나를 지정합니다.
“숫자 기호
3의 모양 자체는 그저 얼굴일 뿐이다. 이 녀석이 어느 ‘자리(방)’에 앉아 있느냐가 실제 이 녀석의 파워(가중치, Weight) 뻥튀기를 결정한다!”
예를 들어 숫자 $333$을 분해해 볼까요? 같은 3이라는 그림(기호)이 세 가지가 쓰였지만, 그 파워는 완전히 다릅니다.
- 맨 오른쪽 1번 방의 3 : 그냥 찌꺼기 잔돈 $3 \times 1$ 입니다.
- 가운데 2번 방의 3 : 뒷자리에 10진법 로켓을 하나 달았습니다. $3 \times 10 = 30$ 의 파워를 지닙니다.
- 맨 왼쪽 3번 방의 3 : 뒤에 방이 두 개나 있습니다! 로켓 2단 부스터장착! $3 \times 10 \times 10 = 300$ 의 압도적 파워를 지닙니다!
결국 문자(그림)를 끝없이 발명할 필요 없이, 가장 뒤쪽(우측)에서 앞으로 전진하는 방(위치)마다 ”$\times 10$의 거듭제곱” 비율로 강제 가중치 파워를 매겨버리면 단 10개의 기호만으로 우주 끝까지의 숫자를 다 커버할 수 있습니다.
2. Python 리스트 해독기: 위치 기수법의 코딩화
위에서 설명한 거듭제곱($10^0, 10^1, 10^2 \dots$)의 방(Room) 개념은 놀랍게도 여러분이 쓰는 파이썬 코드의 ‘리스트 배열 구조(Array Index)’와 수학적으로 완벽하게 똑같습니다!
컴퓨터 과학에서는 인덱스를 $0$번 방부터 세는데, 위치 기수법에서도 가중치를 매기는 거듭제곱은 $10^0(일의 자리)$ 부터 시작하는 소름 돋는 동기화를 보여줍니다.
# 파이썬으로 가동하는 아라비아 숫자 위치 기수법(Positional Notation) 분해 엔진
def decode_positional_number(number_string, base=10):
"""
눈에 보이는 기호(예: '354')를 입력받아,
각 자리가 위치(방 번호)에 따라 어떻게 가중치가 뻥튀기(Power)되는지
수학적 다항식으로 분해하여 렌더링하고 총합을 계산합니다.
"""
total_value = 0
# 1. 1의 자리를 맨 앞(0번 인덱스)으로 정렬하기 위해,
# 문자를 파이썬 슬라이싱으로 파격적으로 뒤집어(Reverse) 버립니다!
# "354" -> "453" (4가 0번 방, 5가 1번 방, 3이 2번 방으로 매칭됩니다)
reversed_digits = number_string[::-1]
print(f"📡 입력된 숫자 '{number_string}'의 위치별 파워를 해독합니다. (기본 10진법)")
# 2. 제로(0)번 방부터 차례대로 로켓 파워를 올려가며 계산합니다!
for room_index, char_digit in enumerate(reversed_digits):
# 기호를 숫자로 바꿉니다. ('5' -> 5)
numeric_val = int(char_digit)
# 기수법의 핵심! 이 방의 폭발 가중치는 Base(10)의 "방 번호(room_index)" 제곱승!
power_weight = base ** room_index
# 기호 모양 X 그 위치의 방 파워
actual_value = numeric_val * power_weight
print(f" - [{room_index}번 방] 로켓 기호 {numeric_val}: {numeric_val} x {base}^{room_index:d} = 실제 권력치 {actual_value}")
total_value += actual_value
print("=" * 40)
print(f"🔥 수학적 다항식 합산 최종 결과: 10진수로 완벽한 {total_value} 복원 완료!")
return total_value
# 테스트: 우주를 뚫는 위치 기수법을 파이썬 배열로 분해해랏!
# '3456'이라는 글자 4개짜리 서식을 던져줍니다.
decode_positional_number("3456", base=10)
[코드 실행 원리]
인간은 직관적으로 $3000+400+50+6$ 이라고 계산하지만, 파이썬은 이 글자들을 자리에 맞게 잘라내어 enumerate(방 번호 부여기)를 달고 오직 배열 번지수(0, 1, 2, 3..)를 $10$의 거듭제곱수 파워업 재료로 승격시켜 총합 시그마($\Sigma$) 계산을 완벽하게 마무리합니다. 이것이 유치원 때 배운 일-십-백-천-만의 컴퓨터 공학적 비밀입니다.
학습 정리
- 위치 기수법 (Positional Notation): 기호의 모양 자체는 기본 숫자에 불과하며, 숫자들이 놓인 순서(자릿수)에 기수(Base, $10, 2$ 등)의 거듭제곱만큼 파괴적인 가중치($100, 1000$배)가 부여되는 혁명적 정보 압축 시스템.
- 기호를 무한정 발명할 필요 없이 단 몇 타(10개)의 기호 부호판(키보드)만 가지고도 무한(Infinite)의 수를 묘사할 수 있게 해준 수학사 최강의 하드웨어 단축키이다.
- 파이썬의 역 슬라이싱
[::-1]과enumerate문법은, 각각 자리의 방 순서($0, 1, 2…$) 인덱스가 곧 파워 가중치승($10^0, 10^1, 10^2…$)이 되는 위치 기수법 다항식을 매우 직관적인 배열 렌더링 코드로 변환해 낸다.