https://www.acmicpc.net/problem/10951
문제
해석
반복문으로 해결하는 문제라는 건 알지만 입력의 종료를 어떻게 처리해야 할지 애매한 문제입니다.
출력의 종료 혹은 파일 입력의 종료를 알리는 EOF를 조건으로 풀어야 합니다.
풀이
입력의 종료가 없다고 해서 다음과 같이 무한루프로 코드를 작성하고 제출하면 "출력 오류"로 틀리게 됩니다.
#include<iostream>
using namespace std;
int main() {
int x,y;
while (1) {
cin >> x >> y;
cout << x + y << endl;
}
}
여기서 파일 입출력이라는 개념을 떠올리면 문제를 풀기 쉬워질겁니다.
백준 같은 사이트의 문제들을 검사할 때 파일을 코드가 읽는 방식으로 채점하기 때문에 백준 사이트에서 제공하는 테스트 케이스는 파일 형태로 코드를 검사할 것입니다.
즉, 테스트 케이스에 대한 입력의 종료는 파일의 끝 EOF가 존재할 것입니다. 때문에 EOF가 입력된다면 반복을 종료시키는 코드를 작성하면 됩니다.
텍스트 I/O 항목을 참고해 주세요 : https://whitecode2718.tistory.com/27
최종적인 코드는 다음과 같습니다.
#include<iostream>
using namespace std;
int main() {
int x,y;
while (1) {
cin >> x >> y;
if (cin.eof())
break;
cout << x + y << endl;
}
}
cin이 파일의 끝 EOF (직접 입력시키는 코드는 ctrl + z입니다.)를 입력받으면 무한루프가 종료됩니다.
정리
아무것도 입력을 받지 않을 때 루프를 종료시키는 아이디어를 학습할 수 있는 문제입니다.
또한 파일의 끝이 EOF인 점을 이용해 반복문을 종료시키는 코드를 다시 한번 상기시킬 수 있었습니다.
'프로그래밍 > 코딩 테스트 연습' 카테고리의 다른 글
[백준] 2557번 : Hello World (1단계) (Python) (0) | 2024.02.05 |
---|---|
[백준] 10807번 : 개수 세기 (4단계) (C++) (0) | 2024.01.12 |
[백준] 10952번 : A+B - 5 (3단계) (C++) (0) | 2024.01.11 |
[백준] 2438번 : 별 찍기 - 1 (3단계) (C++) (0) | 2024.01.11 |
[백준] 2439번 : 별 찍기 - 2 (3단계) (C++) (1) | 2024.01.11 |