[알고리즘 원리] 문자열 → 정수 변환 (n = n * 10 + d) 공식의 원리와 증명

2025. 6. 5. 17:01·CS/알고리즘 & 자료구조
728x90
반응형

컴퓨터 프로그래밍에서 숫자를 입력받는 것은 흔히 있는 일이지만, 그 내부의 원리를 정확히 이해하고 있는 사람은 많지 않습니다. 이번 글에서는 숫자 입력을 처리할 때 흔히 사용하는 공식인 n = n * 10 + (c - '0')의 원리와 수학적 의미를 상세히 다뤄보겠습니다.


✅ 왜 이 주제를 다루는가?

처음 이 공식을 접하면 직관적으로 이해하기 어렵습니다.

저 또한 처음에는 “왜 갑자기 *10을 곱하지?“라는 의문을 가졌습니다.

이 글은 저와 같은 고민을 한 분들에게 직관적인 이해와 명확한 설명을 제공하기 위해 작성되었습니다.


✅ 기본 공식 (n = n * 10 + (c - '0')) 설명하기

이 공식은 문자열로 입력받은 숫자를 정수형으로 변환할 때 사용되는 표준 알고리즘입니다.

예시로 숫자 “371”을 살펴봅시다.

읽는 문자 계산 과정 n 값
'3' n = 0 * 10 + 3 = 3 3
'7' n = 3 * 10 + 7 = 37 37
'1' n = 37 * 10 + 1 = 371 371

각 단계마다 기존 숫자(n)에 10을 곱해서 자리수를 왼쪽으로 쉬프트하고, 그 다음 읽은 숫자를 더해서 자릿수를 누적하는 구조입니다.


✅ 왜 10을 곱하는가?

십진법에서는 각 자릿수가 왼쪽에서 오른쪽으로 갈수록 10배씩 커집니다.

371 = 3 × 100 + 7 × 10 + 1 × 1
-> ((0 × 10 + 3) × 10 + 7) × 10 + 1

이러한 자릿수 확장 공식이 곧 n = n * 10 + d 공식으로 자연스럽게 이어지는 것입니다.


✅ (c - '0') 은 무엇인가?

이 공식에서 (c - '0')은 문자를 실제 숫자로 바꾸는 핵심 원리입니다.

아스키(ASCII) 코드로 숫자 문자는 '0'이 48, '1'이 49이며 순서대로 1씩 증가합니다.

예시:

  • '0' → '0' - '0' = 0
  • '1' → '1' - '0' = 1
  • '9' → '9' - '0' = 9

이렇게 문자에서 ‘0’을 빼면 실제 정수값이 됩니다.


✅ 이 공식은 누가, 언제 증명한 것일까?

사실 이 공식은 특정한 수학자나 알고리즘 연구자에 의해 따로 증명되지는 않았습니다.

이 공식은 십진법(Positional Notation)이라는 위치적 기수법에서 자리수를 표현하는 방법이 처음 등장한 고대 인도 및 아라비아 수학에서부터 자연스럽게 사용된 개념입니다. 즉, **십진법이 발견된 수천 년 전부터 이미 알려져 있던 “산수의 기본 원리”라 할 수 있습니다.


✅ 수학적으로 엄밀한 증명

이를 수학적으로 엄밀히 표현하면 다음과 같습니다.

  • 어떤 십진수 D = d₁d₂...dₙ이 있다고 할 때 (d는 0~9 사이 숫자)
  • D = d₁×10^{n-1} + d₂×10^{n-2} + … + dₙ

이를 왼쪽에서 오른쪽으로 한 자리씩 누적해서 계산하면 다음과 같이 나타낼 수 있습니다.

((d₁×10 + d₂)×10 + d₃)×10 + … + dₙ

이것이 정확히 우리가 사용하는

n = n * 10 + d 공식입니다.


✅ 코드 예시로 이해하기 (자바)

실제 자바 코드에서 어떻게 구현되는지 보겠습니다.

// 문자열 "371" → 정수 371
String input = "371";
int n = 0;

for(int i = 0; i < input.length(); i++) {
    char c = input.charAt(i);
    n = n * 10 + (c - '0');
}

System.out.println(n); // 출력: 371

 

아스키 코드표 참고

 

 


✅ 직관적으로 이해하는 팁

  • 이 공식은 자릿수를 하나씩 왼쪽에서 오른쪽으로 읽으면서 이전까지의 값에 10을 곱해 자리수를 올리고 새 값을 더하는 방식입니다.
  • 헷갈릴 때는 간단한 숫자를 종이에 써서 직접 반복해 보면 쉽게 이해할 수 있습니다.

예시: “1234”

읽는 문자 계산 과정 n 값
'1' 0 × 10 + 1 = 1 1
'2' 1 × 10 + 2 = 12 12
'3' 12 × 10 + 3 = 123 123
'4' 123 × 10 + 4 = 1234 1234

✅ 정리 및 결론

  • n = n * 10 + d 공식은 십진법 자체에서 자연스럽게 도출된 “산수적 알고리즘”입니다.
  • 직관적으로 어렵다면, 손으로 반복해 보면 이해하기 쉬워집니다.
  • 이는 모든 프로그래밍 언어에서 숫자 변환 시 사용되는 표준적인 방식입니다.
728x90
반응형
저작자표시 비영리 (새창열림)

'CS > 알고리즘 & 자료구조' 카테고리의 다른 글

[백준] BOJ 1874 스택 수열  (1) 2025.06.09
[백준] 숫자 카드 2  (0) 2025.06.09
🧩 Dual-Pivot Quicksort  (1) 2025.05.23
Binary Gap 문제  (1) 2025.05.21
벽 부수고 이동하기  (0) 2025.05.13
'CS/알고리즘 & 자료구조' 카테고리의 다른 글
  • [백준] BOJ 1874 스택 수열
  • [백준] 숫자 카드 2
  • 🧩 Dual-Pivot Quicksort
  • Binary Gap 문제
크크크크
크크크크
공뷰를 합시다.
    반응형
  • 크크크크
    Tom's Note
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (130)
      • IT 지식 (6)
      • CS (66)
        • 알고리즘 & 자료구조 (19)
        • 운영체제 (41)
        • 네트워크 (1)
        • 데이터베이스 (5)
      • 보안 (6)
      • SW 공학 & 프로그래밍 언어 (5)
        • Java (28)
        • 디자인 패턴 (1)
        • 형상관리 (2)
        • 톰캣(WAS) (2)
        • SW 방법론 (3)
        • 스프링부트 (5)
      • 시스템 설계 (4)
        • Docker (2)
      • 자격증 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Chage
      su
      스프링부트
      man
      분석기법
      ADsP
      리눅스
      chmod
      cifs
      usermod
      불변
      java
      알고리즘
      DI
      단반향
      자바
      whatis
      which
      비트연산
      암호설정
      1급
      2차
      whereis
      문제해결
      DTO
      REST API
      docker
      apropos
      passwd
      /etc/passwd
    • 최근 댓글

    • 최근 글

    • 250x250
    • hELLO· Designed By정상우.v4.10.3
    크크크크
    [알고리즘 원리] 문자열 → 정수 변환 (n = n * 10 + d) 공식의 원리와 증명
    상단으로

    티스토리툴바