1. 문제 상세
https://www.acmicpc.net/problem/10951

2. 문제 접근
10952번 A+B - 5 와 같이 정수 두 개를 입력받아 그 합을 출력하는 문제이다.
하지만 이번 문제에서는 10952번 문제와 달리 루프를 탈출하는 조건이 따로 주어지지 않았고,
입력이 얼마나 주어지는 지 알 수 없다.
따라서 이번 문제에서는 입력값이 존재하지 않을 때, 즉 읽을 수 있는 데이터가 존재하지 않을 때 까지 반복하고,
루프 중 입력받은 값이 파일의 끝인 EOF 인지 확인하여 루프를 빠져나오도록 해야 한다.
■ EOF
EOF란 End-Of-File 의 약자이다. 파일의 끝, 데이터가 없다는 것을 나타낸다.
C++ 에서 EOF 를 판단하기 위해 cin.eof() 를 사용한다.
EOF 가 맞다면 true 를 반환하고 아니라면 false 를 반환한다.
또 다른 방법으로 조건문에 cin 을 사용하는 방법도 있다.
예를 들어
#include <iostream>
using namespace std;
int main() {
int a, b;
while (cin >> a >> b) {
cout << a+b << "\n";
}
}
위와 같이 조건문에 cin 을 사용한다면 a 와 b 의 입력값에 따라 bool 형식으로 값을 반환한다.
a 와 b 의 입력 값이 int형이 아니면 false, 맞다면 true 를 반환하는 방식이다.
이번엔 루프 중 정수 값을 입력 받은 후 조건문과 cin.eof() 를 사용해 EOF 가 맞는지 확인하여 break 로 루프를 빠져나오자.
아니라면 두 정수의 합을 출력.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int a, b;
while(true) {
cin >> a >> b;
if(cin.eof()) break;
else cout << a+b << "\n";
}
}
정수형 변수 a, b 를 선언한다.
while문에 조건을 true로 주어서 무한 반복하도록 한다.
반복문에서는 cin 으로 a 와 b 의 값을 다시 입력받는다.
입력을 받고 조건문을 사용하여 cin.eof(), 즉 파일의 끝, 입력받은 데이터가 없다면 반복을 중단하도록 한다.
아닌 경우 cout 으로 a 와 b 를 더한 값을 출력한다.
4. 성능 확인

5. 마무리
EOF 가 무엇인지 알아보고 활용해 보았다.
'백준 - 단계별로 풀어보기 > 반복문' 카테고리의 다른 글
[백준] 10952번 : A+B - 5 | C++ (0) | 2023.09.20 |
---|---|
[백준] 2439번 : 별 찍기 - 2 | C++ (0) | 2023.09.20 |
[백준] 2438번 : 별 찍기 | C++ (0) | 2023.09.20 |
[백준] 11022번 : A+B - 8 | C++ (0) | 2023.09.20 |
[백준] 11021번 : A+B - 7 | C++ (0) | 2023.09.20 |
1. 문제 상세
https://www.acmicpc.net/problem/10951

2. 문제 접근
10952번 A+B - 5 와 같이 정수 두 개를 입력받아 그 합을 출력하는 문제이다.
하지만 이번 문제에서는 10952번 문제와 달리 루프를 탈출하는 조건이 따로 주어지지 않았고,
입력이 얼마나 주어지는 지 알 수 없다.
따라서 이번 문제에서는 입력값이 존재하지 않을 때, 즉 읽을 수 있는 데이터가 존재하지 않을 때 까지 반복하고,
루프 중 입력받은 값이 파일의 끝인 EOF 인지 확인하여 루프를 빠져나오도록 해야 한다.
■ EOF
EOF란 End-Of-File 의 약자이다. 파일의 끝, 데이터가 없다는 것을 나타낸다.
C++ 에서 EOF 를 판단하기 위해 cin.eof() 를 사용한다.
EOF 가 맞다면 true 를 반환하고 아니라면 false 를 반환한다.
또 다른 방법으로 조건문에 cin 을 사용하는 방법도 있다.
예를 들어
#include <iostream>
using namespace std;
int main() {
int a, b;
while (cin >> a >> b) {
cout << a+b << "\n";
}
}
위와 같이 조건문에 cin 을 사용한다면 a 와 b 의 입력값에 따라 bool 형식으로 값을 반환한다.
a 와 b 의 입력 값이 int형이 아니면 false, 맞다면 true 를 반환하는 방식이다.
이번엔 루프 중 정수 값을 입력 받은 후 조건문과 cin.eof() 를 사용해 EOF 가 맞는지 확인하여 break 로 루프를 빠져나오자.
아니라면 두 정수의 합을 출력.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int a, b;
while(true) {
cin >> a >> b;
if(cin.eof()) break;
else cout << a+b << "\n";
}
}
정수형 변수 a, b 를 선언한다.
while문에 조건을 true로 주어서 무한 반복하도록 한다.
반복문에서는 cin 으로 a 와 b 의 값을 다시 입력받는다.
입력을 받고 조건문을 사용하여 cin.eof(), 즉 파일의 끝, 입력받은 데이터가 없다면 반복을 중단하도록 한다.
아닌 경우 cout 으로 a 와 b 를 더한 값을 출력한다.
4. 성능 확인

5. 마무리
EOF 가 무엇인지 알아보고 활용해 보았다.
'백준 - 단계별로 풀어보기 > 반복문' 카테고리의 다른 글
[백준] 10952번 : A+B - 5 | C++ (0) | 2023.09.20 |
---|---|
[백준] 2439번 : 별 찍기 - 2 | C++ (0) | 2023.09.20 |
[백준] 2438번 : 별 찍기 | C++ (0) | 2023.09.20 |
[백준] 11022번 : A+B - 8 | C++ (0) | 2023.09.20 |
[백준] 11021번 : A+B - 7 | C++ (0) | 2023.09.20 |