🧪 자바에서 테스트 케이스가 여러 가지 방식으로 주어질 때 입력 처리 방법
문제를 풀다 보면 테스트 케이스가 다양한 방식으로 주어질 수 있다. 그 방식에 따라 입력 처리 로직을 다르게 구성해야 한다.
✅ 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));
'문제 풀이 > 도구정리' 카테고리의 다른 글
[도구정리] 세그먼트 트리(Segment Tree) 알고리즘 (0) | 2025.04.13 |
---|---|
[도구정리] 최소 신장 트리(MST) - 크루스칼(kruskal) 알고리즘 (0) | 2025.04.07 |
[도구정리] 플로이드-와샬(Floyd-Warshall) 알고리즘 (0) | 2025.04.01 |
[도구정리] Binary Search(이분탐색/이진탐색) (0) | 2025.03.13 |
[도구정리] 최장 증가 부분 수열(LIS, Longest Increasing Subsequence) (0) | 2025.03.13 |