[백준] 11720번 : ASCII를 활용한 배열연산

업데이트:

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

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

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

예제 입력 1

25
7000000000000000000000000

예제 출력 1

7

알고리즘 [ 접근방법 ]

언뜻 보면 굉장히 쉬운 문제이다. 단순히 입력받은 숫자의 자리수 합을 출력하면 되지만 한가지 함정이 있다. 예제 입력1을 보면 25자리 숫자를 입력받아 7000000000000000000000000을 입력한다. 이런 경우 일반적인 정수 자료형으로는 해당 숫자를 입력 받을 수 없다.

[ 자료형 종류 ]

enter image description here

정수형 중 가장 범위가 넓은 long long 자료형도 약 +-1019 까지만 커버가 가능하기 때문에 20자리가 넘어갈 경우 입력받을 수 없다.

따라서 이런 경우에는 숫자로 입력받을 것이 아니라 문자형으로 입력을 받아야만 한다.

이때 문자를 배열에 입력을 받고 문자 하나하나를 분리하여 연산을 하는 과정이 필요한데 이는 아스키코드를 활용해 해결할 수 있다.

[ 아스키 코드표 ]

enter image description here

풀이

    #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 이 되므로

각 자리의 합을 쉽게 구할 수 있다!

댓글남기기