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); }
채점 결과

참고
- [단계별로 풀어보기] > [반복문]
- 참고 사이트 : https://st-lab.tistory.com/257
[백준] 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 |