[백준] 초보자용 10951번 - A + B - 4 [hasNextInt()] (java)

팥빵·2025년 4월 8일

Baekjoon

목록 보기
7/49

>>문제 바로가기<<
정답률 36.2%의 반복문 문제이다.
그냥 단순한 반복문인데 왜 정답률이 낮을까?
포인트는 "입력을 몇 번 하는지 알려주지 않는다"라는 점에 있다.










import java.util.Scanner;

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

런타임 에러(InputMisatch)

만약 코드를 저렇게 짠다면
런타임 에러를 마주할 수 있을것이다.
왜 그런걸까?







EOF(End of File)
     "입력(데이터)의 끝"을 나타내는 신호 또는 상태

백준은 입력을 전부 제공하고 나면 EOF(입력 종료)를 보낸다.
"더이상 읽을 수 없는 시점"이다.
sc.nextInt()가 있어서 당연히 정수형이 올 줄 알았는데
EOF때문에 읽을수가 없으니 시스템이 당황해서 런타임 에러를 내보낸다.

때문에 while문을 true로 설정해서 항상 들어갈 수 있게 하면 안되고
조건을 달리해서 넣어줘야한다.

그래서 필요한 함수가 hasNextInt() 함수이다.







> hasNextInt()

위 함수는
"입력받은 값이 정수면 true를 반환"하고,
"그 외의 값을 받으면 false를 반환"한다.

즉 while 조건문에 해당 함수를 넣으면
Scanner 입력을 받은 후 hasNextInt()가 먼저 이게 정수인지 아닌지 판단하고
맞다면 true, 틀리면 false를 반환한다.



때문에 EOF를 받게돼도 false로 판단되어
안전하게 while문을 탈출할 수 있고
런타임 에러가 발생하지 않는다.









import java.util.Scanner;

public class Main{
	public static void main(String[] args){
    	Scanner sc = new Scanner(System.in);
        int A, B;
        while(sc.hasNextInt()){
        	A = sc.nextInt();
            B = sc.nextInt();
            System.out.println(A+B);
        }
    }
}

그러므로 최종적인 코드는 이렇게 짜여진다.





맞았습니다!!

profile
반갑습니다

0개의 댓글