백준 10951번 EOF 개념

Kyu·2021년 1월 28일
0

알고리즘

목록 보기
7/7

문제링크: https://www.acmicpc.net/problem/10951

일단 문제 자체는 그냥 두 수를 입력받아서 출력하는 게 끝이다. 근데 입력을 몇개 할 것인지 명시되어 있지가 않다. 종료시점이 언제인지 알수가 없다는 것이다.

이상태로 어떻게 코드를 짤까?

문제점의 시초는 이거였다. 지금까지 외부로부터 데이터가 들어오는 게 아니라 직접 데이터를 입력하는 방법으로 밖에는 코드를 만들어보지 못했기 때문이다.

데이터가 알수없는갯수만큼 들어오는 상황이라면 추측이지만 외부에서 EOF (End-Of-File) 을 명시해주는 것같다. 그리고 mysql에서 config바꿀때 마지막에 EOF라고 써줬음

자바로 Buffer와 StringTokenizer를 쓰면 다음과 같은 코드로 문제를 풀 수 있다.

public class P10951 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st;
        String s = "";

        while ((s = br.readLine()) != null) {
            st = new StringTokenizer(s, " ");
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());

            bw.write(A + B + "\n");
        }
        bw.flush();
        bw.close();
        br.close();
    }

}

애초에 while 문 조건을 명시할때, 입력을 받도록하고 그것을 변수에 저장한다. 그리고 입력값이 들어오면 null이 아니기 때문에 더한 것을 write한다.

그리고 또 추측이지만, 외부에서 들어오는 데이터가 마지막에 EOF 라고 선언하면서 br.readLine()은 읽을 데이터가 없는 상태가 되고 예외를 보내면서? String이 null이 되는듯하다?.

실제로 IDE 내에서 이 코드를 실행하면 계에에에에속 데이터를 받기만 한다. 그러니까 분명히 외부에서 데이터가 들어올때, 예를 들어서, 백준에서 데이터가 들어올때 입력의 끝이라는 걸 명시해주는 어떤 내부적인 코드가 있을거고 그게 EOF일 것이다

profile
TIL 남기는 공간입니다

0개의 댓글