각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
각 테스트 케이스마다 A+B를 출력한다.
문제를 이해하지 못했는데 : 이 문제는 EOF를 물어보는 문제였음
= 입력의 종료는 더이상 읽을 수 있는 데이터(EOF)가 없을 때 종료
EOF란?
이 문제에서는 파일의 종료 조건이 없이 단지 입력만이 주어짐
= 입력에서 더 이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하라
이렇게 데이터가 더 이상 없을 때 EOF(End of File)이라고 함
처리방법
Scanner의 경우는 읽을 데이터가 없다면 NoSuchElementException을 던짐
해결 방법
try-catch문으로 예외 발생시 반복문을 종료
Scanner의 메소드인 hasNext()를 통해서 처리
Scanner 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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.hasNextInt()){
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+b);
}
sc.close();
}
}
BufferedReader 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
String str;
while((str = br.readLine()) != null){
st = new StringTokenizer(str, " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(a+b).append("\n");
}
System.out.println(sb);
}
}
위의 방법을 사용하게되면 stringtokenizer의 객체가 계속되서 생성되기 때문에 시간을 잡아먹는다
문제를 보게되면 정수는 항상 한자릿수 정수, " "를 기준으로 위치도 항상 고정되어있음
여기서 사용한 방법은 charAt()
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str;
while((str = br.readLine()) != null){
int a = str.charAt(0) - 48;
int b = str.charAt(2) - 48;
sb.append(a+b).append("\n");
}
System.out.println(sb);
}
}