728x90
728x90

문제

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

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

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

 

출력

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

 

예제 입력 1 

1 1
2 3
3 4
9 8
5 2

 

예제 출력 1

2
5
7
17
7

 

출처

  • 문제를 만든 사람: baekjoon
  • 빠진 조건을 찾은 사람: djm03178

 

알고리즘 분류

  • 수학
  • 구현
  • 사칙연산

 

문제 출처

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

 

10951번: A+B - 4

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

www.acmicpc.net

 


 

문제 해결 방법

  • 문제의 조건에 종료 조건이 없어 당황스러웠다.
  • 처음에는 무한 루프(while (1)) 안에서 입력 받은 두 수의 합을 출력 하도록 코드를 짜고 제출하였으나 "출력 초과" 오류가 발생하였다.
  • 이 문제는 EOF(End Of File)와 관련된 문제이다.
    • 주어진 입력 파일만 갖고 입력을 받을 때 더 이상 읽을 수 없는 데이터가 없는 경우(파일의 끝일 경우) 이를 EOF(End OF File)이라고 한다.
    • 파일을 읽은 뒤 EOF 체크를 하는 것이 이 문제의 핵심이다.
    • EOF에 도달하면 false가 출력되어 결국 무한 루프에서 빠져나오게 된다.
  • 조건문 안에 cin이 있는 경우 연산자 오버로딩에 의해 bool 값으로 true 혹은 false 값이 반환된다.
    • 스트림이 정상 상태일 경우 true, 아니면 false
  • 조건문 안에 cin 을 이용하여 두 문자를 입력 받는 방식으로 이 문제를 해결하였다.
    • while (cin >> a >> b) { }

 

코드

#include <iostream>
using namespace std;

int main() {
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);

    int A, B;

    while (cin >> A >> B) {
        cout << A + B << '\n';    
    }

    return 0;
}

 

다른 방법

scanf() 를 이용한 방법
while (scanf("%d %d", &a, &b) != -1) {    // scanf("%d %d", &a, &b) != 2 또한 가능
    printf("%d\n", a + b);
}

 

cin.eof() 를 이용한 방법
while (!(cin >> a >> b).eof()) {    // eof() 대신 fail() 을 사용해도 됨.
    printf("%d\n", a + b);
}

 

 

 

채점 결과

 

참고

 

[백준] 10951번 : A + B - 4 - [C++]

https://www.acmicpc.net/problem/10951 10951번: A+B - 4 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 이 전 문제인 A+B - 5와 문제가 같아보이나 이 번 문제..

st-lab.tistory.com

 

728x90
728x90

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ-2577][C++] 숫자의 개수  (0) 2022.07.10
[BOJ-2562][C++] 최댓값  (0) 2022.07.10
[BOJ-10818][C++] 최소, 최대  (0) 2022.07.10
[BOJ-1110][C++] 더하기 사이클  (0) 2022.07.09
[BOJ-10952][C++] A+B - 5  (0) 2022.07.09
[BOJ-10871][C++] X보다 작은 수  (0) 2022.07.09
[BOJ-2439][C++] 별 찍기 - 2  (0) 2022.07.09
[BOJ-2438][C++] 별 찍기 - 1  (0) 2022.07.09