자바 백준 15552번 BufferedReader, BufferedWriter

Kyu·2020년 12월 17일
1

알고리즘

목록 보기
2/7
post-thumbnail

BufferedReader (입력값을 읽는다는 뜻의 Read) & BufferedWriter (Read한 것을 Write한다) 특징

Scanner가 한글자씩 받고 처리하는 반면에 Buffer는 들어오는 값을 모아두었다가 한번에 쏟아낸다(flush). 그래서 Scanner보다 BufferedReaderBufferedWriter가 빠르다.

▲note: 위에 대한 더 자세한 설명은 https://jhnyang.tistory.com/m/92

기본적으로 BufferReaderString만 읽는다. 다른 데이터타입으로 받으려면 String으로 형변환 해주어야하고 Writer를 쓸때에도 마찬가지이다. 즉, int를 Read & Write 하려면 먼저, String으로 Read한 숫자를 int로 바꿔서 변수에 담는다. 그러고나서 그 변수를 Write하려면, int형태로 바뀐 정수를 다시 String형태로 형변환해서 Write해야한다.

BufferedReader & BufferedWriter 사용법

(코드 1) String 읽고 쓰기


BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(System.out));
// 괄호안에 콘솔창으로 읽을건지, 파일로 읽을건지 등등에 따라 맞는 Reader & Writer를 넣는다.

String str = br.readLine();
// String이기 때문에 형변환을 안해도 된다.

bw.write(str);
// write만 하면 콘솔에 안나온다.

bw.flush();
// flush를 사용하면 한꺼번에 쏟아낸다.
// 지금은 한개만 꺼내서 쏟아낸다는게 헷갈릴수 있지만,
// for문을 사용해서 백준 15552번을 풀어보면 알수있다.

bw.close();
br.close();
// Scanner 닫듯이 이것도 닫아주자.

(코드 2) int 읽고 쓰기


BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(System.out));
// 괄호안에 콘솔창으로 읽을건지, 파일로 읽을건지 등등에 따라 맞는 Reader & Writer를 넣는다.

int i = Integer.parseInt(br.readLine());;
// String 으로 Read했기 때문에 형변환을 안해도 된다.

bw.write(String.valueOf(i));
// int로 형변환된 것을 다시 String으로 형변환한다.
// write만 하면 콘솔에 안나온다.

bw.flush();
// flush를 사용하면 한꺼번에 쏟아낸다.
// 지금은 한개만 꺼내서 쏟아낸다는게 헷갈릴수 있지만,
// for문을 사용해서 백준 15552번을 풀어보면 알수있다.

bw.close();
br.close();
// Scanner 닫듯이 이것도 닫아주자.

(코드 3) 백준 15552import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            
            int T = Integer.parseInt(br.readLine());
            
            StringTokenizer st;
            // StringTokenizer를 선언한 이유는,
            // 요구사항이 입력받을 때 한줄로 받도록 되어있기 때문이다.
            // split처럼 사용할수있다.
            
            for (int i = 0; i < T; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                
                int A = Integer.parseInt(st.nextToken());
                int B = Integer.parseInt(st.nextToken());
                
                bw.write(A+B + "\n");
                // 개행 시켜주는 문자열인 \n을 더해주면,
                // A+B는 자동으로 String으로 바뀐다.
            }
            bw.flush();
            bw.close();
            br.close();
    }
}

질문

bw.write(String.valueOf(A+B));
bw.newLine();

왜 다음과 같은 코드를 쓰면 출력이 정상적으로 되지 않을까?

profile
TIL 남기는 공간입니다

0개의 댓글