알고리즘을 풀면서 입출력 때문에 시간의 차이가 나는 경우가 꽤 있었기에, BufferedReaderd와 BufferedWriter에 대해 간단히 설명하겠습니다.

 

Scanner

Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();

Scanner로 입력받는 데에 한계를 느낄 때 BufferedReader를 사용하면 됩니다.

 

BufferedReader

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

String s = bufferedReader.readLine();
int x = Integer.parseInt(bufferedReader.readLine());

readLine() 함수를 이용해서 읽어올 경우 String의 리턴 값을 가집니다. 그렇기 때문에 parseInt() 함수를 이용하여 String 값을 int형으로 파싱 해 주었습니다. 또한 예외처리를 꼭 해주어야 하는데 대개 throws IOException을 통하여 작업합니다.

 

Scanner의 경우 nextInt()를 입력하면 공백 다음 숫자를 받기 때문에 어려움이 있지만, BufferedReader를 사용하면 

StringTokenizer를 이용하여 String을 특정 구분자(delimeter) 값을 통해 공백을 기준으로 문자열을 나눕니다.

 

StringTokenizer

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());

int a = Integer.parseInt(stringTokenizer.nextToken());
int b = Integer.parseInt(stringTokenizer.nextToken());

StringTokenizer에 nextToken() 함수를 쓰면 bufferedReader.readLine()을 통해 입력받은 값을 공백 기준으로 구분하여

순서대로 호출합니다.

 

BufferedWriter

BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.in));

bufferedWriter.write("Hello\n");
bufferedWriter.flush();
bufferedWriter.close();

일반적으로 System.out.println을 이용하면 자동 줄 바꿈을 해주지만, bufferedWriter.write()는 자동 줄 바꿈이 없기 때문에 \n을 작성해주어야 한다. 마지막에 flush() / close()함수를 작성해주지 않을 경우 제대로 출력이 되지 않을 수도 있습니다.

+ Recent posts