https://www.acmicpc.net/problem/11720
문제
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
풀이과정
문자열에는 포인터를 활용하는 방법/ 배열을 활용하는 방법이 있다
포인터를 활용하는 방법은 scanf값을 대입해줄 수 없으므로 ( 읽기전용 )
배열을 활용하는 방법을 선택하기로 하였다.
#include <stdio.h>
//문자열에는 포인터를 활용하는 방법/ 배열을 활용하는 방법이 있다
// 포인터를 활용하는 방법은 scanf값을 대입해줄 수 없으므로, ( 읽기전용 )
// 배열을 활용하는 방법을 선택하기로 하였다.
int main() {
int N; //입력할 숫자의 개수
char arr[100]; //크기가 100인 char 형 배열 선언
int sum = 0; // 입력된 숫자들의 합 선언
scanf("%d", &N); //입력받아 N에 넣기
//숫자 한꺼번에 입력 by 문자열
scanf("%s", &arr);
//문자형을 정수형으로 변환해준 뒤, atoi함수 활용
// 정수형 끼리 더해서 출력
for (int i = 0; i < N; i++) {
sum = sum + arr[i] - '0';
}
printf("%d", sum);
return 0;
}
의문점
int sum = 0; // 입력된 숫자들의 합 선언
for (int i = 0; i < N; i++) {
sum = sum + arr[i] - '0';
}
printf("%d", sum);
Q)자료형이 다른데 어떻게 계산이 될까?
sum 은 int형/ arr은 문자형이지만 둘이 합쳐지면 자동적으로 계산이 된다.
Q) 그럼 왜 '0' 이라는 문자를 빼준 것일까?
이 부분은 ASCII 코드와 함께 이해해야한다.
▲문자0은 정수형으로 48을 의미한다는 뜻이다.
예를들어 우리가 입력한 문자열이 arr[6] = {5,4,3,2,1,NULL} 이라면
arr[0]의 ASCII 코드 5는 '53'이라는 숫자로 치환될 수있다.
즉,
53이라는 숫자에서 '0'를 빼주면 원래 값인 5가 나올 수 있다는 원리를 활용한 것이다.
문자'0'는 숫자 48에 대응하기 때문이다.
코딩 공부는 어렵지만 정말 재밌는 것같다.
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 백준 10809 (0) | 2021.09.07 |
---|---|
C언어 백준 10809 번 (2) | 2021.09.04 |
C언어 1065번 해설 한수 (0) | 2021.09.02 |
C언어 백준 4344번 해설 (0) | 2021.09.01 |
C언어 백준 8959번 (0) | 2021.09.01 |