백준 10951번 문제
10952번과 비슷하지만 여기서 차이점은 10952번 문제는 input의 마무리를 (0, 0)으로 알 수 있지만, 10951의 경우, input을 마무리하는 숫자가 어떠한 숫자가 입력될지 모르는 것과 몇 번 입력되는지 알 수 없는 것입니다.
어떻게 풀어야 되나 수차례 고민했지만, 결국 답이 나오지 않아 구글링을 하였고, 해결책은 EOF(End Of File)이며, 파일의 끝을 표현하기 위해 정의해 놓은 상수('-1'값)였습니다.(매크로)
이는 콘솔, 터미널 창에서 "Ctrl + Z"를 입력할 때와 같은 값을 반환합니다.
매크로 함수는 코드 상단에서 전처리기 지시문(processor directive)을 작성할 때 "#define" 뒤에 정의할 수 있으며, EOF 매크로의 경우 <stdio.h>에 내장되어 있는 매크로입니다.
이제 EOF 매크로를 이해하기 쉽게 아래 예시 코드로 보겠습니다.
#include <stdio.h> // 전처리기 지시문 (<stdio.h>에 내장되어 있습니다.)
int main(void)
{
int a;
while(1) // 무한 반복문
{
scanf("%d", &a);
if (a == EOF) // 조건문으로 EOF('-1')의 경우
{
break; // break로 탈출문 작성
}
else // 그렇지 않을경우, 아래 코드 반복
{
printf("%d + 4 = %d\n", a, a+4);
}
}
return 0;
}
-1을 input으로 넣어주자 조건문에서 EOF와 같아서(==), break(반복 탈출문)로 코드가 종료된 것을 알 수 있습니다.
!. 10951번의 정답은 아래 코드와 같습니다.
#include <stdio.h>
int main(void)
{
int a, b;
while(scanf("%d %d", &a, &b) != EOF)
{
printf("%d\n", a + b);
}
return 0;
}
[출처 : https://www.acmicpc.net/problem/10951]