본문 바로가기

코딩/백준 BOJ

[백준/C언어] 11720번 - 숫자의 합

백준 웹사이트 "11720번 - 숫자의 합" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net


소스 코드

#include <stdio.h>

int main(void){
    int N;
    scanf("%d\n", &N);

    char numbers[N];
    scanf("%s", numbers); // 배열의 이름은 pointer

    int sum = 0;
    for(int i=0; i<N; i++){
        int digit = numbers[i]-'0'; //숫자를 char -> int
        //printf("digit: %d\n", digit);
        sum += digit;
    }
    printf("%d\n", sum);
}

문제 풀이

  숫자 N을 입력받고, 문자열 'numbers'를 입력받는 것은 이전까지 했던 예제들과 비슷합니다. 주의할 것은 Line 12에서 숫자를 char형에서 int형으로 바꾸는 것입니다. 숫자를 문자열로 입력받으면 char형의 '5'는 int형으로 바꿨을 때 5가 되지 않고, 아스키 코드에 의해 53이 됩니다. 따라서 해당하는 int형으로 바꾸기 위해서 char형의 '0'을 빼주면 됩니다. Line 12와 같이 numbers[i]-'0'을 하면, numbers[i]의 아스키 코드와 '0'의 아스키 코드 간의 차가 계산되며, 이 값은 정확히 맞아떨어지게 됩니다. '5'의 경우, '5' - '0'은 아스키 코드로 바뀌었을 때 53 - 48이 되어 5라는 결과값으로 변하며, 이는 나머지 숫자들에 대해서도 성립합니다.

반응형