이것이 문제의 내용인데 여기서 주목해야 할 것은, 입력 받는 정수들이 공백으로 분리되어 있다는 것이다.
이것을 몰라서 한참 고생했다.
일단 Scanner 클래스보다 읽는 속도가 빠른 BufferedReader 클래스와, print() 메서드 보다 시간적으로 효율이 높은 BufferedWriter 클래스를 사용하기 위해 각각 객체를 생성해 준다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = "";
BufferedReader 과 Writer은 모두 문자열로 이루어져 있으므로 , 문자형(String) 변수를 선언하여 초기화 해준다.
문제에서 반복문이 몇번 반복해야 하는지 명시가 되어 있었다면, for문을 통해서 반복횟수를 정하고 작성하는 것이 맞지만, 이 문제는 반복 횟수를 정하지 않고 값이 입력되어 있을때 계속 동작해야 하므로, while문을 통해 조건을 주었다.
while((input = br.readLine()) != null) {
아까 초기화해둔 input 변수에 readLine() 메서드를 사용하여 한줄을 읽어오고, input 값이 null이 아닐때까지 동작하도록 조건을 설정 하였다.
BuffredReader로 가져온 내용은 모두 문자열로 이루어져 있으며 예를 들어, 10 20 을 입력하면 "10 20"으로 이루어져 있는 것이다.
그러므로 String 클래스의 split() 메서드를 이용해서 공백을 제거하고 각각 배열에 넣어 주는 것이다.
String[] arr = input.split(" "); int a = Integer.parseInt(arr[0]); int b = Integer.parseInt(arr[1]);
각각 배열에 넣어주면 "10 20"을 입력 하였다면
arr[0] = "10" , arr[1] = "20"이 될 것이다.
이럴 경우 문제에서 합계를 구할 것을 요구하였으므로, 숫자로 변환을 해주어야 하는데 이때 사용하여야 하는 메서드가 Integer클래스의 parseInt() 이다.
숫자로 변환한 a,b 값을 String 클래스의 valueOf() 메서드를 통해서 valueOf((a+b)); 와 같이 문자열로 변환해주고, BufferedWriter를 통해서 write()로 써주고, newLine()으로 한줄을 줄바꿈 해준 뒤에,
flush() 메서드로 내용을 출력해주면 된다.
import java.io.*; public class Main2 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String input = ""; while((input = br.readLine()) != null) { String[] arr = input.split(" "); int a = Integer.parseInt(arr[0]); int b = Integer.parseInt(arr[1]); String value = String.valueOf((a+b)); bw.write(value); bw.newLine(); bw.flush(); } } }
모두 java.io 패키지에 있는 클래스들을 사용하였으므로, java.io* 로 전부 import 하였고, 메인 메서드에서 예외를 던지기 위해서 throws IOException이라고 작성해 주었다.