프로그래밍/C

[백준_11720] 숫자의 합

O'bin 2022. 2. 26. 19:00

<문제 링크>

https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

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

www.acmicpc.net

 

 

<고민>

띄어쓰기나 구분 표시 없이 입력되는 숫자를 어떻게 하나씩 떼어 계산하지?

 ㄴ 정수로 받아서 10씩 나눠가며 한자리씩 값을 얻어야 하나?

      -> 근데 문자열 카테고리에 있는 문제니까 문자열을 이용해야겠지

정수를 문자열로 입력받으려면 어떻게? sprintf를 이용해야 하나?

 

 

<정답 코드>

#include <stdio.h>

int main() {
	int n, sum = 0;
	scanf("%d", &n);	//입력할 숫자 갯수(n) 정수형 입력
	char input[100];	//둘째줄에 입력할 숫자를 넣을 배열(n이 최대 100이니까 크기 100으로 설정)
	scanf("%s", &input);	//공백 없이 입력할 숫자들은 char로 입력받음 -> 한글자씩 input배열에 들어감
	for (int i = 0; i < n; i++) {
		sum += input[i] - '0';	//input배열 값에서 '0'을 빼고 sum에 더한다
	}
	printf("%d", sum);
}

 

< input[i]-'0'을 하는 이유 >

 

char형은 문자를 정수로 저장

 

예를 들어 input에(둘째 줄 입력) 123을 입력했다면,

 

input 배열 index 0 1 2 ...
내가 계산하고자 하는 수 1 2 3
실제 저장되는 값
(숫자의 ASCII코드 값)
49 50 51
원하는 연산 input[0]-'0'
= 49-48 = 1
input[1]-'0'
= 50-48 = 2
input[2]-'0'
= 51-48 = 1

 

sum+input[0]은 0+49('1'의 아스키코드값)로 49가 된다.

내가 원하는 연산은 input[0]이 49가 아닌 1로 계산되는 것이므로

input[0]-'0' 해줌으로써

49-48('0'의 아스키 코드 값)=1 이 연산되도록 하는 것이다.

 

 

 

 

 

char형의 입력과 저장에 대해 정확히 이해하고 있다면 쉽게 풀리는 문제였던 것 같다.

난 정확히 이해하진 못했던 것 같다. 이번에 완전히 알고 넘어가야겠다.

'프로그래밍 > C' 카테고리의 다른 글

[백준_1152] 단어의 개수  (0) 2022.03.01
[백준_10809] 알파벳 찾기  (0) 2022.02.26
[백준_2577] 숫자의 개수(배열 0으로 초기화)  (0) 2022.02.20
[백준_10951] A+B - 4 (EOF)  (0) 2022.02.17