Java 공부/Java 일반

입력값의 제공 횟수가 정해져있지 않을 때의 해결법 (백준 기준)

모항 2023. 9. 5. 15:43

백준 문제를 풀다 보면, 입력값의 제공 횟수가 정해져있지 않은 문제가 자주 등장한다.

 

예를 들면 다음 문제와 같다.

 

https://www.acmicpc.net/problem/4436

 

4436번: 엘프의 검

중간계에 살고있는 엘프 종족은 특정 숫자를 다른 숫자보다 중요하다고 믿는다. 따라서, 그들은 금속 n만큼을 이용해서 칼을 만들 때, 두께를 다음과 같은 규칙을 지키는 k로 한다면, 엄청나게

www.acmicpc.net

 

본 문제에서는 한 줄에 하나씩 입력값이 주어진다.

단, 총 몇 줄의 입력값이 주어지는지는 정해져있지 않다.

따라서 계속해서 반복문을 돌리며 입력을 받다가, 입력값이 null이 되는 순간 작동을 종료해야 한다.

 

예를 들면 다음과 같이 하면 된다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		// 입력값을 받아올 수단 선언 (Scanner, BufferedReader 등)
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// null 값을 담은 문자열 변수 선언
		String input = null;
		
		// while문의 조건절 안에서 입력값을 받고 null인지 판별
		while((input = br.readLine()) != null) {
			// while문 내부에서, 문제에서 요구하는 작업을 수행
		}
		
	}

}

 

위와 같이 코드를 짜면 백준에서 문제 없이 돌아간다.

 

 

단, 주의할 점이 한 가지 있다.

위와 같이 코드를 짠 후 이클립스에서 실행시키면

주어진 입력값을 콘솔창에 붙여넣은 뒤 Enter를 계속 눌러도 프로그램이 종료되지 않고 무한히 돌아간다.

아무 값을 입력하지 않고 Enter를 눌렀을 경우, 해당 줄의 값은 빈 문자열일 뿐 null이 아니기 때문이다. 빈 문자열과 null은 다르다.

백준에 제출하였을 때는 아무 문제가 없으니 걱정하지 않아도 된다.