들어가며
1일 1 커밋을 위해 백준 문제 풀이를 이어나가다 기존의 학습했던 내용으로는 해결 불가능한 부분이 발생하여 문제 해결 후, 그 과정을 기록해보고자 한다.
A+B - 4
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
각 테스트 케이스마다 A+B를 출력한다.
예제 입력 1
1 1
2 3
3 4
9 8
5 2
예제 출력 2
2
5
7
17
7
EOF(End of File)
이 문제 자체의 난이도만 보았을 때는 정말 쉬운 문제이지만 가장 중요한 점은 파일 종료 조건이 없이 예제 입력만 주어졌다는 것이다. 즉, 입력에서 더 이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문 및 프로그램을 종료시킬 수 있어야 하는 것이다.
이런 식의 데이터가 더 이상 존재하지 않을 때를 EOF(End of File), 즉, 파일의 끝이라고 한다. 이를 BufferedReader를 이용하여 어떻게 처리하는지 알아보고자 한다.
Solution.java
import java.io.*;
import java.util.StringTokenizer;
public class Main {
/* A+B - 4 */
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 str;
while ((str = br.readLine()) != null) {
st = new StringTokenizer(str);
if (!st.hasMoreTokens()) break;
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int sum = a + b;
bw.write(sum + "\n");
}
bw.flush();
bw.close();
}
}
while문의 조건부에서 초기화시킨 문자열 str을 BufferedReader를 통해 입력받은 값이라 가정했을 때, 해당 값이 null일 경우 종료하게끔 설정해주었다. 이를 통해 간단하게 문제 해결도 가능했다. 수동으로 프로그램을 구동하여 테스트 해볼 경우에는 입력을 모두 마친 뒤, Enter를 두 번 연이어 눌러 null 값을 넣어주거나 윈도우의 경우 ctrl + Z 혹은 리눅스의 경우 ctrl + Z를 입력하면 예제와 같이 출력되는 것이 확인 가능하다.
백준의 티어 시스템을 알게되어 적용해보니 해당 문제는 가장 난이도가 낮은 브론즈 5에 해당하는 문제였다. 문제가 전혀 어렵지는 않지만 문제 풀이에 필요한 EOF 처리 방법에 대해 이제야 학습하고 있다는게 스스로 부끄러울 따름이다.
개발 공부를 본격적으로 시작하고자 마음먹은 지 5개월째인 지금도 기초적인 문제를 풀고 있지만 꾸준히 공부하고 기록하다 보면 분명 좋은 결과가 있을 것이라 생각한다.