[Java] 알고리즘을 위한 빠른 입출력

WS·2022년 9월 6일
0

Algorithm

목록 보기
2/8

알고리즘 문제를 풀 때 빠른 입출력을 위해 BufferedReader / BufferedWriter 라는 클래스가 있습니다.
이름과 같이 버퍼를 이용하여 읽거나 쓰는 클래스입니다.

버퍼를 사용하지 않으면 입출력장치(키보드, 모니터 등)의 외부장치와 데이터 입출력 시간은 상당히 오래 걸리는 시간입니다. 그래서 중간에 버퍼를 둬서 데이터를 묶어놓고 이동시키면 효율적이고 빠르기 때문에 이 함수를 많이 씁니다.

1.BufferedReader 사용법

보통 자바를 맨처음 접하면 Scanner이라는 클래스를 배우는데 이것과 유사한 클래스입니다.
하지만 BufferedReader는 엔터를 경계로 인식하고, 무조건 String으로 받아지기 때문에 데이터를 가공해야 됩니다.
우선 BufferedReader 사용법을 알아봅시다.

import java.io.*;

public class Main {
    public static void main(String[] args)throws IOException { // 예외처리
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언 
        String str = br.readLine(); // 문자열
        int i = Integer.parseInt(br.readLine()); // 정수형으로 형변환
    }
}

BufferedReader를 사용하려면 예외처리를 해주어야 합니다.
그 다음에는 BufferedReader를 선언해 주고 아래와 같이 사용할 수 있습니다.

2.BufferedWriter 사용법

BufferedWriter는 System.out.println("");과 같은 역할을 합니다.

import java.io.*;

public class Main {
    public static void main(String[] args)throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
        bw.write("string 1 ");
        bw.newLine(); //개행 
        bw.write("string 2");
        bw.write("\n"); // 개행
        bw.flush(); // 출력
        bw.close(); // bw 종료
    }
}

위와 같이 선언을 하고 write를 통하여 쓰고, flush 함수를 이용하여 버퍼에 남아있는 데이터를 모두 출력해서 없애줍니다.

3.StringTokenizer

BufferedReader는 라인을 읽어 들이기 때문에 위와 같은 Input이 주어지는 알고리즘을 풀 때 공백마다 split 해줘야 합니다. 이를 편하게 하기 위해 문자열을 토큰으로 바꿔서 편하게 사용할 수 있는 클래스가 바로 StringTokenizer 입니다.
StringTokenizer를 생성하는 방식은 총 3가지가 있습니다.

1. StringTokenizer st = new StringTokenizer(문자열);
2. StringTokenizer st = new StringTokenizer(문자열, 구분자);
3. StringTokenizer st = new StringTokenizer(문자열, 구분자, true || false); // default : false

첫번째의 경우는 띄어쓰기를 기준으로 나뉘어집니다.
두번째의 경우는 구분자를 기준으로 나뉘어집니다.
세번쨰의 경우는 구분자를 Token으로 취급하는지 안하는지를 체크하고, 나뉘어집니다.

이제 StringTokenizer를 이용하여 문자열을 나눠보겠습니다.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args)throws IOException {
        String str = "가 나 다 라 마 바 사";
        StringTokenizer st = new StringTokenizer(str); // 선언
        while(st.hasMoreTokens()){ // Token이 있으면 True, 없으면 False를 반환
            System.out.println(st.nextToken()); // 나뉘어진 Token들을 출력
        }
    }
}

다음 포스트 부터는 알고리즘을 공부해봅시다!

0개의 댓글