#include <iostream>
using namespace std;
int main() {
int x = 0;
int y = 0;
int a[100];
for (int i = 0; i < 100; i++) {
cin >> x >> y;
a[i] = x + y;
}
for (int i = 0; i < 100; i++) {
cout << a[i] << endl;
}
return 0;
}
a라는 배열을 넉넉하게 100의 크기를 가질 수 있도록 int형 변수로 선언했다. 문제를 너무 쉽게만 보았던 것이 함정이었다고 생각한다. 넉넉하게 입력값을 넣으면 단 한 번에 이에 대한 출력이 나오나? 라고 생각하면서 만든게 위의 코드다. 물론 넣을때마다 바로 더한 값이 나오도록 코드도 짰지만 문제의 핵심을 관통하지 않아 오답의 고배를 마셔야만 했다.
#include <iostream>
using namespace std;
int main() {
int x, y;
while (1) {
cin >> x >> y;
if (cin.eof() == true) {
break;
}
cout << x + y << endl;
}
return 0;
}
이 문제의 핵심은 바로 eof()이다. eof는 end of file 이라는 말로, 말그대로 파일의 끝에 도달하면 EOF를 리턴한다.
파일이 종료될 때까지 입력을 받으라는 의미를 아래와 같이 작성해볼 수 있다.
if (
cin.eof() == true; // true라면 더이상 입력할 값이 없는 상태
false; // false라면 아직 입력할 값이 있어서 해당 if문을 충족하지 못하는 상태
) // bool타입을 가지기 때문에 true / false로 판단
그러면, 굳이 반복을 넉넉하게 100번 잡아주면 된다고 생각한다거나, 1000번이 된다거나,, 등 불필요한 여유로움을 생각하지 않아도 된다. 컴퓨터는 eof()를 쓰지 않는 이상 내가 100을 잡아도 101을, 10000을 잡아도 10001개의 테스트 케이스를 대입할 테니까...