[백준] [C/C++] [★] 10950번 : A+B

업데이트:

✅ 문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.







✅ 입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)







✅ 출력

각 테스트 케이스마다 A+B를 출력한다.







✅ 알고리즘 [ 접근방법 ]

단순하게 값을 두개 입력받아 그 합을 출력하는 문제이다.

다만, 배열을 사용하는데 있어서 컴파일 오류가 여러번 발생해 이를 설명해보려고 한다.

백준 10950번

발생한 에러는 런타임 에러(OutOfBounds) 이다.

흔히 Array를 사용할 때 많이 발생하는 오류인데 선언된 배열의 값을 넘어서까지 값을 입력할 때 발생하는 오류이다.




긴 설명 필요없이 바로 코드를 통해 오류를 살펴보자

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

int n;
int A[5], B[5]; // 배열의 크기가 너무 작음
int res[5] = { 0, }; // 배열의 크기가 너무 작음

scanf("%d", &n);
for (int i = 0; i < n; i++) {
	scanf("%d %d", &A[i], &B[i]);
	res[i] = A[i] + B[i];
}

for (int i = 0; i < n; i++) {
	printf("%d\n",res[i]);
}



return 0;

}

배열을 선언할 때 전부 5개의 값을 가질 수 있도록 선언을 해놨는데 5개 이상의 값을 입력받아야 할 경우에는 런타임 에러(OutOfBounds)가 발생 하게 된다.




따라서 이를 예방하기 위해서는 적당히 충분한 정도의 배열의 크기를 설정하는 것이 좋다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

int n;
int A[1000], B[1000];
int res[1000] = { 0, };

scanf("%d", &n);
for (int i = 0; i < n; i++) {
	scanf("%d %d", &A[i], &B[i]);
	res[i] = A[i] + B[i];
}

for (int i = 0; i < n; i++) {
	printf("%d\n",res[i]);
}



return 0;

}








✅ 추가풀이

배열을 사용하지 않고 while문을 사용하면 컴파일 에러를 예방할 수 있다.

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	int t;
    	scanf("%d", &t);
    	int a, b;
    	while (t--) {
    		scanf("%d %d", &a, &b);
    		printf("%d\n", a + b);
    	}
    	return 0;
    }

댓글남기기