백준 11720: 숫자의 합

hoon·2024년 12월 16일

백준

목록 보기
20/44

-'0'는 아스키코드 값의 차이를 이용하여 문자(char)를 정수(int)로 변환하기 위해 사용된다.

아스키코드에서 숫자 문자 '0'~'9'는 각각 48~57의 값을 가진다. 예를 들어:

  • '0'의 아스키코드 값은 48
  • '1'의 아스키코드 값은 49
  • '2'의 아스키코드 값은 50

즉, 문자 '1'을 정수 1로 변환하려면 '1' - '0'을 계산한다:

  • '1'(49) - '0'(48) = 1

이 방식을 사용하면 문자 배열에 들어있는 숫자 문자를 정수로 변환할 수 있다. 따라서 sum += b[i] - '0'는 각 문자를 숫자로 변환한 값을 누적하는 작업이다.

코드에서 중요한 부분

sum = b[i] + sum - '0';

위 코드는 b[i]의 문자 값을 숫자로 변환한 후 sum에 더한다.

-'0'을 하지 않으면, 문자(char)의 아스키코드 값 그대로 계산되기 때문에 원하는 결과와 완전히 다른 값이 나올 수 있다.

예시

만약 -'0'을 하지 않고 아래와 같은 코드를 실행했다고 가정하자:

sum = b[i] + sum;

여기서 입력이 "123"이라면:

  1. 문자 '1'의 아스키코드 값은 49
  2. 문자 '2'의 아스키코드 값은 50
  3. 문자 '3'의 아스키코드 값은 51

따라서, 계산 과정은 다음과 같이 진행된다:

  • sum = 0 + 49sum = 49
  • sum = 49 + 50sum = 99
  • sum = 99 + 51sum = 150

결과적으로, 문자의 숫자 값이 아니라 아스키코드 값의 합을 계산하게 된다. 이 결과는 우리가 원래 의도한 숫자의 합(1 + 2 + 3 = 6)과 전혀 다르다.

정리

-'0'을 하지 않으면:

  • 문자 '1', '2', '3' 등을 정수 1, 2, 3으로 변환하지 못한다.
  • 대신 각 문자의 아스키코드 값이 사용되어, 잘못된 합이 계산된다.

따라서, 입력된 숫자 문자열의 각 문자를 정확히 정수로 변환하려면 반드시 -'0'이 필요하다!

0개의 댓글