[C++] 백준 10951번 문제 : A + B - 4 - cin.eof()

wansuper·2023년 4월 30일
0

CodingTest

목록 보기
7/34

핵심 키워드: while문의 사용, cin.eof()

오답코드

#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개의 테스트 케이스를 대입할 테니까...

profile
🚗 Autonomous Vehicle 🖥️ Study Alone

0개의 댓글