백준 온라인 저지 문제풀이/JAVA

[baekjoon 10951번] while문 - A+B - 4(테스트 케이스 개수가 입력되지 않았을 때)

Good Program Good Programmer 2020. 11. 29. 13:11

테스트 케이스 갯수가 입력되지 않았을 때는 그냥 계속 입력되겠끔 코딩을 하면 된다. 즉, while(true){}와 똑같은 결과가 나온다. 하지만 그렇게 제출을 해버리면 당연히 오답처리된다. 출제자의 의도는 다른 많은 사이트에 나와있듯이 EOF를 만날 때까지만 입력을 할 수 있는 프로그램을 만들라는 것 같다.

 

그렇다면 EOF를 만날 때까지 입력을 받는 프로그램이랑 그냥 while(true)문은 어떤 차이가 있을 지 알아보겠다.

import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;


public class Main {
    public static void main(String args[]) throws IOException {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(a+b);
        }
        sc.close();
    }
}
출처:ddoongi.tistory.com/31

위 코드는 EOF를 만날 때까지만 입력을 받는 프로그램이고

 

import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;


public class Main {
    public static void main(String args[]) throws IOException {
        Scanner sc = new Scanner(System.in);
        while (true) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(a+b);
        }
    }
}

위 코드는 while(true)문을 사용한 코드이다. 각각의 결과는 다음과 같다.

 

1 1
2
2 3
5
^D

Process finished with exit code 0

【EOF까지 받는 코드】

 

1 1
2
2 3
5
^D
Exception in thread "main" java.util.NoSuchElementException
	at java.base/java.util.Scanner.throwFor(Scanner.java:937)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at Main.main(Main.java:10)

Process finished with exit code 1

【while(true) 코드】

 

보시다시피 ctrl+D를 눌러서 EOF를 입력해줬을 때 하나는 그냥 종료를 해주고 다른 하나는 nextInt()메소드에서 Exception이 발생하여 종료되는 것을 확인할 수 있다.

 

따라서 EOF까지만 입력받고 싶은 프로그램에서는 while문에서 EOF까지만 받도록 지정을 해줘야 하는 것을 알 수 있다.