C언어 Baekjoon

민성철·2022년 12월 2일
0

baekjoon_C_Language

목록 보기
1/1

백준 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]

profile
ENTJ-A

0개의 댓글