백준 웹사이트 "11720번 - 숫자의 합" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#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라는 결과값으로 변하며, 이는 나머지 숫자들에 대해서도 성립합니다.
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 2675번 - 문자열 반복 (0) | 2022.01.09 |
---|---|
[백준/C언어] 10809번 - 알파벳 찾기 (0) | 2022.01.08 |
[백준/C언어] 11654번 - 아스키 코드 (0) | 2022.01.07 |
[백준/C언어] 1065번 - 한수 (0) | 2022.01.06 |
[백준/C언어] 4673번 - 셀프 넘버 (2) | 2022.01.05 |