2020-10-01
알고리즘 문제를 풀다 보면 항상 문제에 대한 입력값이 주어지는데
(Ex) N * M = K) 이러한 입력값을 받기 위해서
Scanner라는 함수를 많이 사용할 것이다.
물론 필자도 Scanner이 사용이 편하고 해당 함수로
입력 함수를 입문을 했기 때문에 조금 더 익숙한 것이 사실이다.
(BufferedReader는 선언시 조금 길다..)
Scanner scan = new Scanner(System.in);
//Scanner 사용전 변수 선언
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//BufferedReader 사용전 변수 선언
(실제로 변수를 선언하는 과정에서는 길이가 두배 정도 차이 난다.)
다만 성능면에서는 BufferedReader함수보다 구리다는 것은
누구나 아는 사실이다.
(성능 == 속도)
때문에 입력받는 값이 많을 경우에는 해당 값을 버퍼에 저장해
코드를 처리할 수 있는 BufferReader함수를 사용하는 것이 좋다.
사용법은 아래와 같다.
버퍼 개념
버퍼(buffer, 문화어: 완충기억기)는 데이터를
한 곳에서 다른 한 곳으로 전송하는 동안
일시적으로 그 데이터를 보관하는 메모리의 영역이다.
버퍼링(buffering)이란 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다.
다른 말로 '큐(Queue)'라고도 표현한다.
출처 : 위키피디아
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//패키지를 무려 3개나 사용
public class main629 {
public static void main(String[] args) throws NumberFormatException, IOException {
//예외처리는 필수
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
System.out.println(n);
}
}
또한 BufferedReader 함수는 기본 입력값이 항상 String이기 때문에
int / double / long와 같은 다른 속성으로 변경을 하기 위해서는
형 변환 작업이 필요하다.
(예외처리를 하지 않으면 오류가 나기 때문에 항상 체크해 주어야 한다!)
출력 시에는 주로 단축키 sout를 사용한
System.out.println(); 를 주로 사용할 것이다.
다만 이것도 버퍼를 거치지 않는 출력으로
속도면에서 BufferedWriter보다 느리다는 것이
저명한 사실이다.
때문에 많은 출력을 요할 때에는
BufferedWriter를 사용해 좀 더 효율적인
작업을 진행할 수 있다.
소스코드는 아래와 같다.
소스코드
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
//패키지를 무려 3개나 사용
public class main629 {
public static void main(String[] args) throws NumberFormatException, IOException {
//예외처리는 필수
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String text = "안녕하세요!";
bw.write(text);
//System.out.print();
//입력받은 문자를 출력하는 기능
bw.newLine();
//System.out.println();
//에서 ln과 같은 기능 줄을 바꾸어준다.
bw.flush();
//혹시나 남아있는 데이터들은 모두 출력함
bw.close();
//출력문을 닫는 함수
}
}