문제

문제출처 : Baekjoon

img

풀이

import java.util.*;

public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);

        int a,b = 0;

        while(sc.hasNextInt()){
            a = sc.nextInt();
            b = sc.nextInt();
            if(a < 0 && b < 10){
                break;
            }else {
                System.out.println(a - b);
            }
        }
        sc.close();
    }
}

회고

  1. 1000번문제와 비슷해서 따로 안올리려고 했었는데 런타임에러 만나고 이부분을 해결했었어서 기록해두기로 한다.

1000번 문제에 기록해둔 두번째 답지에서 a,b의 범위와 println만 바꿔서 제출했었다.

[오류가 발생했던 코드↓]

import java.util.*;

public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);

        int a,b = 0;

        while(true){
            a = sc.nextInt();
            b = sc.nextInt();
            if(a < 0 && b < 10){
                break;
            }
        }
        sc.close();
        System.out.println(a-b);
    }
}

하지만 이렇게 내니까 런타임 에러 (NoSuchElement) 에러가 났었다. 1000번문제에서는 정상적으로 동작하는데 1001번이랑 비슷한 다른 문제들에서만 문제가 발생하는 이유는 잘 모르겠다 ==;; 어쨌든 백준에서는 에러가 난 부분에 대해서 잘 설명해줘서 천천히 읽어보니

while(true) 로 설정하면, 보통 이런 문제는 입력의 끝을 EOF로 판단해야 합니다. 더 이상 입력 받을 수가 없는데 입력을 받으려고 했기 때문에, 다음과 같은 입력에서 런타임 에러가 발생합니다. 백준사이트참고

그래서 while(true) 말고 1000번 문제에 1번풀이에서 사용했었던 sc.hasNextInt() 을 사용해야한다고 한다. 이러한 에러처리에 대해 알게되어서 좋다. 앞으로는 이런 실수 하지 않도록 조심해야지!