<문제 링크>
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 |