문제링크: 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일 것이다