프로그래밍 언어/C

C언어 백준 11720 해설

happy_life 2021. 9. 3. 15:15

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

 

11720번: 숫자의 합

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

www.acmicpc.net

 

문제

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 코드와 함께 이해해야한다. 

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