백준 - 단계별로 풀어보기 [10951] A+B - 4
https://www.acmicpc.net/problem/10951
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
각 테스트 케이스마다 A+B를 출력한다.
풀이
해당 문제는 입력을 마치는 조건이 없기 때문에, EOF 개념을 활용하여 풀어야 하는 문제이다.
EOF란 End Of File의 약자로, ASCII코드 값 -1을 가진다. 일반적으로 파일의 마지막을 만났을 때 EOF 값을 가져오지만, 입력을 직접 받아올 수도 있다. Ctrl+Z를 입력할경우 EOF 값인 -1이 getchar나 scanf를 통해 들어간다.
해당 문제는 개인적으로, EOF 조건에 대한 부연설명이 미흡했다고 생각한다.
입력의 개수가 주어지지 않는 경우, 일반적으로 EOF를 활용하여 처리를 한다고 한다.
EOF를 체크하는 방법은 간단하다.
while(scanf("%d %d", &a, &b) != EOF){...}
위와 같은 반복문 처리를 해주면 EOF까지만 입력을 받을 수 있다.
코드
#include <cstdio>
int main() {
int a[1000];
int b[1000];
int i = 0;
while(scanf("%d %d",&a[i],&b[i]) != EOF)
{
i++;
}
for(int j = 0; j < i; j++)
{
printf("%d\n",a[j]+b[j]);
}
return 0;
}
평가
EOF 개념이 생소하다면 입력이 끝나는 조건을 어떻게 프로그램이 알게 할 것인지에 대해서 고민에 빠질 수 있는 문제이다.
이번 문제도 정답비율 38%로 유독 낮은 정답률을 가지고 있었다.
EOF를 활용한 입력 종료를 학습하는 용도로 보면 좋을 것 같다.
'Algorithm > Baekjoon BOJ' 카테고리의 다른 글
[백준 / BOJ] - 1018번 체스판 다시 칠하기 C++ 풀이 (1) | 2020.02.06 |
---|---|
[백준 / BOJ] - 1157번 단어 공부 C++ 풀이 (0) | 2020.02.03 |
[백준 / BOJ] - 10809번 알파벳 찾기 C++ 풀이 (0) | 2020.01.30 |
[백준 / BOJ] - 4344번 평균은 넘겠지 C++ 풀이 (0) | 2020.01.29 |
[백준 / BOJ] - 10172번 개 C++ 풀이 (0) | 2020.01.28 |