본문 바로가기
[백준]

[BaekJoon/백준] 4단계 "while문"

by Hevton 2020. 8. 31.
반응형

이에 해당하는 문제는 10952번, 10951번, 1110번으로 총 세문제다.

10951번이 10952번보다 더 나중 순서로 문제가 등록되어있는데, 그 이유를 곧 뼈저리게 느꼈다.

 

10951번에서 어리버리 타다가 시간을 엄청 뺏겼다. 정답률도 왜 낮은지 알겠더라.. 이번 글에서는 10951번만 다루고자 한다.

아무것도 생각안하고 10951번을 풀다가는 정말 영문을 모르고 틀렸다는 문구만 내내 받을 수 있다. 해당 문제의 설명에는 EOF에 대해 알아보라는 말이 있다. 나는 이걸 읽긴 했는데도, 입력에 대한 프로그램의 흐름을 생각을 1도 안했는지, 아니면 그냥 아무생각이 없었던건지 여튼 굉장히 틀려대다가 겨우 맞췄다. 짜증이 나서 C/C++두 가지 경우로 모두 풀어봤다.

 

▶︎ C++

#include <iostream>
using namespace std;
int main()
{
    int a, b;
    while(1)
    {
        cin >> a >> b;
        if(cin.eof())
            break;
        else
            cout << a+b << endl;
    }
    return 0;
}

나중에 또 얼타면서 헷갈려하다가 틀리지 않기 위해 열심히 메모하겠다. while문 안에서 cin으로 a와 b의 값을 받아본다. 나는 EOF가 -1의 값인것임을 알고있었다는 이유로, 처음에는 a에 값에 -1이 들어가면 break 하라는 말도안되는 코딩을 했다... 값이 -1로 들어갈 수도 있는것인데 말이야.. 여튼 cin >> a >> b 를 통해 두 정수 값을 받아보는데, 만약 이 과정에서 eof 값이 (Ctrl+z) 입력되었다면 cin은 입력 값이나 갯수에 상관없이 EOF를 뿜을 것이고, 이를 cin.eof함수를 통해 검사하는 흐름이다. 참고로 위 순서가 굉장히 중요하다. 입력받아보고, 검사.

 

▶︎ C

#include <stdio.h>
int main()
{
    int a, b;
    
    while(1)
    {
        int key = scanf("%d %d", &a, &b);
        if(key==EOF)
            break;
        else
            printf("%d\n", a+b);
    }
    return 0;
}

함수만 다르지 C도 C++과 동일하다. 여기선 scanf함수를 통해 입력을 받는 도중 EOF 값이 입력된다면 scanf는 곧바로 EOF를 뿜을 것이다.

파일 입출력으로 봤을때, 입력 스트림 함수들이 파일을 읽다가 파일의 끝(=EOF)을 만나면 즉시 EOF를 뿜는 현상과 동일한 작용이다. 

 

 

짜증났던 만큼 열심히 메모했다. 중요한 사항인데 많이 어버버 한 것 같아서 스스로에게 분하다...

반응형

'[백준]' 카테고리의 다른 글

[BaekJoon/백준] 6단계 "1차원 배열"  (0) 2020.09.02
[BaekJoon/백준] 5단계 "실습1"  (0) 2020.08.31
[BaekJoon/백준] 3단계 "for문"  (0) 2020.08.30
[BaekJoon/백준] 2단계 "if문"  (0) 2020.08.29
[BaekJoon/백준] 1004번  (0) 2020.08.29