백준 문제를 풀다 보면, 입력값의 제공 횟수가 정해져있지 않은 문제가 자주 등장한다.
예를 들면 다음 문제와 같다.
https://www.acmicpc.net/problem/4436
본 문제에서는 한 줄에 하나씩 입력값이 주어진다.
단, 총 몇 줄의 입력값이 주어지는지는 정해져있지 않다.
따라서 계속해서 반복문을 돌리며 입력을 받다가, 입력값이 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은 다르다.
백준에 제출하였을 때는 아무 문제가 없으니 걱정하지 않아도 된다.
'Java 공부 > Java 일반' 카테고리의 다른 글
Class로 클래스의 정보 얻어오기 (리플렉션) (0) | 2022.08.08 |
---|---|
람다식 (Lamda Expression) (0) | 2022.07.28 |
자바에서 1차원 배열을 활용한 우선순위 큐 구현하기 (0) | 2022.07.19 |
자바에서 문자열의 형식을 설정하기 : String.format() (0) | 2022.03.29 |
String을 char[]로 바꾸어주는 toCharArray() (0) | 2022.02.22 |