백준 10951번 [ A+B-4 ]

홍수민·2023년 1월 7일
0

BAEKJOON이다

목록 보기
7/18

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


단순한 숫자합 출력 문제로 보인다. 그런데 여기에 함정이 숨어있다! 그건 바로 '숫자 몇 개를 입력받는지 알 수 없다'라는 것이다. 이렇게 입력을 받을 때 더 이상 읽을 수 있는 데이터가 없을 경우, EOF(End Of File, 파일의 끝)을 활용할 수 있다.

이 문제에서는, 읽을 수 있는 데이터가 더 이상 존재하지 않을 때 반복문을 종료할 것을 요구하고 있다. 참고로 '시점'을 정확히 파악해야 하는데, 파일의 끝까지 읽고난 뒤에 '그 다음 파일을 읽으려고 할 때' 읽을 데이터가 없다면 EOF가 되는 것이다.

따라서 EOF를 활용한 코드는 다음과 같다.

1. eof를 활용한 코드

#include <iostream>
using namespace std;

int main(){
  int a, b;
  
  while(!(cin >> a >> b).eof()){
    cout << a + b << endl;
  }
  return 0;
}

(cin >> a >> b)가 eof 상태가 아니라면 두 수의 합을 입력한다. eof 상태라면 반복문이 종료된다.

다른 방법도 있다.

2. bool 값을 이용한 코드

#include <iostream>
using namespace std;

int main(){
  int a, b;
  
  while(cin >> a >> b){
    cout << a + b << endl;
  }
  return 0;
}

eof를 활용하지 않았다. (cin >> a >> b)가 정상 상태면 true, 아니라면 false를 반환하여 반복문을 실행한다.

profile
수만이다

0개의 댓글