문제 URL:
10952번: A+B - 5
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
다음 문제는 숫자를 입력받고 입력 받은 수의 합을 구하는 문제로,
입력의 마지막에는 0 두 개가 들어간다.
이 문제에서 먼저 숫자들을 입력받기 위해 동적 배열을 이용하였는데,
여기서 어려웠던 점은 배열의 크기를 모르기 때문에 동적배열의 크기를 변수로 잡는다고 해도
그 변수가 반복문 이전에 정해지지 않아서 문제를 푸는데 고민을 많이 했었다.
따라서 생각해낸 방법은 일단 배열의 크기를 1로 초기화 한 뒤,
(0이면 반복문의 조건에 맞지 않기 때문에 1로 초기화 해주었다.)
동적 배열을 선언하고, while문 안에 배열의 크기를 증가시켜주는 코드(size++)를 삽입하여 필요한만큼 배열의 크기를 증가시켰다. (배열의 증가된 요소를 초기화 해주는 코드 역시 삽입)
또한, 중간에 if 조건문을 통해 입력된 두 수가 모두 0이 되면 반복문을 빠져나오는 코드도 작성해주었다.
다음 과정을 거친 코드는 아래 풀이 1과 같다.
+) 이 문제를 풀고 난 뒤, 너무 복잡하게 푼 것 같아서 다른 방법을 생각하다가 혹시 변수 두 개를 그냥 입력하여 작성해도 문제가 풀리지 않을까 하는 생각으로 변수 a, b를 만들고, while 반복문 속 cin, cout을 이용하여 문제를 풀어봤더니 이전 방법이 무색하게 너무 간단한 코드가 나왔다. 다음 방법은 아래 풀이 2와 같다.
풀이 1.
#include<iostream>
using namespace std;
int main()
{
int size=1, i=0;
int* list1 = new int[size]{1};
int* list2 = new int[size]{1};
while((list1[i]!=0)||(list2[i]!=0))
{
size++;
cin >> list1[i] >> list2[i];
if((list1[i]!=0)||(list2[i]!=0))
cout << list1[i]+list2[i] << '\n';
else
break;
i++;
list1[i]={1};
list2[i]={1};
}
}
풀이 2.
#include<iostream>
using namespace std;
int main()
{
int a,b;
while(true)
{
cin >> a >> b;
if((a==0)&&(b==0))
break;
cout << a+b << '\n';
}
}