(백준)10951번 A+B -4 풀기

DevSeoRex·2022년 6월 5일
0

백준

목록 보기
2/12

백준 문제를 풀기 시작한지 3일만에 복병을 만났다. 여지껏 정수를 입력받아 출력하는 문제들은 대부분 Scanner를 이용해서 입력 받고 간단히 출력하면 되었는데, 드디어 시간제한 1초를 주는 문제가 나왔다, 즉 Scanner과 println() 메서드를 사용하면 풀 수 없는 문제라는 것이다.

이것이 문제의 내용인데 여기서 주목해야 할 것은, 입력 받는 정수들이 공백으로 분리되어 있다는 것이다.
이것을 몰라서 한참 고생했다.

1. BufferedReader & Writer 객체 생성

일단 Scanner 클래스보다 읽는 속도가 빠른 BufferedReader 클래스와, print() 메서드 보다 시간적으로 효율이 높은 BufferedWriter 클래스를 사용하기 위해 각각 객체를 생성해 준다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

2. BufferedReader로 읽어올 문자열 변수를 초기화 해준다.

String input = "";

BufferedReader 과 Writer은 모두 문자열로 이루어져 있으므로 , 문자형(String) 변수를 선언하여 초기화 해준다.

3. 반복문의 조건을 설정한다.

문제에서 반복문이 몇번 반복해야 하는지 명시가 되어 있었다면, for문을 통해서 반복횟수를 정하고 작성하는 것이 맞지만, 이 문제는 반복 횟수를 정하지 않고 값이 입력되어 있을때 계속 동작해야 하므로, while문을 통해 조건을 주었다.

while((input = br.readLine()) != null) {

아까 초기화해둔 input 변수에 readLine() 메서드를 사용하여 한줄을 읽어오고, input 값이 null이 아닐때까지 동작하도록 조건을 설정 하였다.

4. 한 줄로 이루어진 두개의 정수를 분리하여 배열에 넣고, 숫자로 변환하기

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() 이다.

5. 계산한 값을 문자열로 변환하고 출력하기

숫자로 변환한 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이라고 작성해 주었다.

0개의 댓글