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$ 의 압도적 파워를 지닙니다!
숫자 333이 자리(방 번호)에 따라 어떻게 거듭제곱 파워업(로켓 부스터)을 받는지 시각화한 수직 로켓 격납고 SVG

결국 문자(그림)를 끝없이 발명할 필요 없이, 가장 뒤쪽(우측)에서 앞으로 전진하는 방(위치)마다 ”$\times 10$의 거듭제곱” 비율로 강제 가중치 파워를 매겨버리면 단 10개의 기호만으로 우주 끝까지의 숫자를 다 커버할 수 있습니다.

2. Python 리스트 해독기: 위치 기수법의 코딩화

위에서 설명한 거듭제곱($10^0, 10^1, 10^2 \dots$)의 방(Room) 개념은 놀랍게도 여러분이 쓰는 파이썬 코드의 ‘리스트 배열 구조(Array Index)’와 수학적으로 완벽하게 똑같습니다! 컴퓨터 과학에서는 인덱스를 $0$번 방부터 세는데, 위치 기수법에서도 가중치를 매기는 거듭제곱은 $10^0(일의 자리)$ 부터 시작하는 소름 돋는 동기화를 보여줍니다.

2D 웹툰 사이버펑크 스타일: 파이썬 인덱스 숫자 0, 1, 2가 적힌 미래지향적 빛나는 유리 격납고 배열 안에서 기본 숫자가 거대한 지수 파워 발생기를 통해 엄청난 권력으로 곱해지는 장면
# 파이썬으로 가동하는 아라비아 숫자 위치 기수법(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$) 계산을 완벽하게 마무리합니다. 이것이 유치원 때 배운 일-십-백-천-만의 컴퓨터 공학적 비밀입니다.

학습 정리

  1. 위치 기수법 (Positional Notation): 기호의 모양 자체는 기본 숫자에 불과하며, 숫자들이 놓인 순서(자릿수)에 기수(Base, $10, 2$ 등)의 거듭제곱만큼 파괴적인 가중치($100, 1000$배)가 부여되는 혁명적 정보 압축 시스템.
  2. 기호를 무한정 발명할 필요 없이 단 몇 타(10개)의 기호 부호판(키보드)만 가지고도 무한(Infinite)의 수를 묘사할 수 있게 해준 수학사 최강의 하드웨어 단축키이다.
  3. 파이썬의 역 슬라이싱 [::-1]enumerate 문법은, 각각 자리의 방 순서($0, 1, 2…$) 인덱스가 곧 파워 가중치승($10^0, 10^1, 10^2…$)이 되는 위치 기수법 다항식을 매우 직관적인 배열 렌더링 코드로 변환해 낸다.
서브목차