C언어에서 숫자가 입력된 CHAR에서 INT를 추출할때 '0'을 빼는 이유

C언어에서 숫자가 입력된 CHAR에서 INT를 추출할때 ‘0’을 빼는 이유

baekjoon 11720번 문제 학부 이후 C를 오랜만에 만지게 된 계기가, 알고리즘 문제를 다시 풀면서 익숙한 java나 다른 언어를 제외하고 원시 언어를 이용해 풀기로 스스로 정했기 때문이다. 문제를 풀어 나가던 중에, 숫자가 입력된 CHAR 자료형을 다루게 됐는데, INT 자료형으로 처리할 수 없는 문제라서 CHAR인 숫자에서 INT를 추출할때 0을 빼는 이유가 궁금해 졌다.

11720 INTEGER로 풀때

  • 보다시피 알고리즘은 먹히고 간단한 자리수 까지는 문제가 풀린다.
  • 문제는 입력이 1 <= N <= 100까지라는 건데, 100자리까지 들어온 INT는 범위를 벗어나, 정상적으로 저장이 되지 않으므로 실패한다.

gist:ppzxc/86952f7620f4ad0868a79b92497e37bd#INTEGER.C

11720 CHAR로 풀때

  • 이제 입력되는 숫자는 문자열로 받아 한자리씩 숫자로 바꿔야 한다.
  • 이때 각 자리수별 CHAR에 입력되 있는 숫자를 INT로 바꿔야 되는데, 문자 ‘0’을 빼는 이유는 CHAR = ‘1’이 입력되 있다는건 ASCII 숫자 49로 표현되기 때문이다.
  • 실제로 CHAR에 입력되어있는 숫자를 %d로 출력해 보면, 0이 48로 출력되고 48은 ASCII 코드에서 문자 0을 의미한다.
  • 자세한 내용은 ASCII CODE

gist:ppzxc/86952f7620f4ad0868a79b92497e37bd#CHAR.C

Reference