[백준] 11720번 : ASCII를 활용한 배열연산
업데이트:
문제
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
출력
입력으로 주어진 숫자 N개의 합을 출력한다.
예제 입력 1
25
7000000000000000000000000
예제 출력 1
7
알고리즘 [ 접근방법 ]
언뜻 보면 굉장히 쉬운 문제이다. 단순히 입력받은 숫자의 자리수 합을 출력하면 되지만 한가지 함정이 있다. 예제 입력1을 보면 25자리 숫자를 입력받아 7000000000000000000000000을 입력한다. 이런 경우 일반적인 정수 자료형으로는 해당 숫자를 입력 받을 수 없다.
[ 자료형 종류 ]
정수형 중 가장 범위가 넓은 long long 자료형도 약 +-1019 까지만 커버가 가능하기 때문에 20자리가 넘어갈 경우 입력받을 수 없다.
따라서 이런 경우에는 숫자로 입력받을 것이 아니라 문자형으로 입력을 받아야만 한다.
이때 문자를 배열에 입력을 받고 문자 하나하나를 분리하여 연산을 하는 과정이 필요한데 이는 아스키코드를 활용해 해결할 수 있다.
[ 아스키 코드표 ]
풀이
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int n;
char str[200];
int sum = 0, i = 0;
scanf("%d", &n);
scanf("%s", str);
for (int i = 0; i < n; i++) {
sum += (str[i] - '0');
}
printf("%d", sum);
}
입력받은 문자에서 ‘0’을 빼주면, 예를들어 123을 입력했을때
‘1’ - ‘0’ = 49 - 48 = 1
‘2’ - ‘0’ = 50 - 48 = 2
‘3’ - ‘0’ = 51 - 48 = 3 이 되므로
각 자리의 합을 쉽게 구할 수 있다!
댓글남기기