문제 풀이/도구정리

[도구정리] 코딩테스트 EOF 입력 처리(JAVA)

27200 2025. 6. 16. 20:32

🧪 자바에서 테스트 케이스가 여러 가지 방식으로 주어질 때 입력 처리 방법

문제를 풀다 보면 테스트 케이스가 다양한 방식으로 주어질 수 있다. 그 방식에 따라 입력 처리 로직을 다르게 구성해야 한다.


✅ 1. 테스트 케이스 개수를 알려주는 상황

가장 흔한 형태로, 첫 줄에 테스트 케이스의 수 T가 주어진다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());

for (int i = 0; i < T; i++) {
    // 테스트 케이스 처리

✅ 2. 특정 문자열이 종료를 나타내는 경우

예를 들어, 입력이 "0"일 경우 테스트 종료를 의미하는 입력 방식.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String input = null;
while (!(input = br.readLine()).equals("0")) {
    // input 재사용 가능
}

✅ 3. 테스트 케이스가 몇 개인지 명시되지 않은 경우

예를 들어, 다음과 같은 입력:

5 7
1 10
2 5
4 2

처럼 테스트 케이스 수나 종료 조건이 없는 경우엔 파일 끝(EOF)을 기준으로 입력을 처리한다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String input = null;
while ((input = br.readLine()) != null) {
    // 입력 처리
}

 

⚠️ 주의: 빈 문자열 예외

Integer.parseInt()를 사용하는 경우 빈 줄("")이 들어오면 NumberFormatException이 발생할 수 있다. 따라서 다음과 같이 필터링이 필요하다:


🧪 입력을 input.txt로 테스트하고 싶을 때

코드를 제출하기 전에 파일로 입력을 테스트할 수 있다.

📁 프로젝트 구조

your-project/
├── input.txt        ← 입력 파일
├── src/
│   └── Main.java    ← 자바 코드

📄 파일에서 입력 받기

BufferedReader br = new BufferedReader(new FileReader("input.txt"));

✅ 제출 전에는 다시 표준 입력으로 변경

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));