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
문제 해결 방법
- 문제의 조건에 종료 조건이 없어 당황스러웠다.
- 처음에는 무한 루프(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);
}
채점 결과
참고
- [단계별로 풀어보기] > [반복문]
- 참고 사이트 : https://st-lab.tistory.com/257
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 |