본문 바로가기

[알고리즘] 백준 풀이

BufferedReader BufferedWriter

java로 백준 문제를 풀면 남들이 푼 답에는 BufferedReader BufferedWriter를 사용하고 있었다. 당시에는 해당구문이 무엇인지 몰랐다. 백준의 15552번 의 문제를 풀던 중 이 문제의 난관에 도달했다. for문을 사용할 경우 입출력 방식에서 시간초과가 나올 수 있다는 문제가 나왔다. 이를 해결하기 위해 BufferedReader BufferedWriter를 사용하라고 나와있다. 이 둘은 각각 Scanner System.out.println과 처리 결과는 비슷하다. 하지만 둘은 처리과정에서 차이가 있다. Scanner와 println에서는 텍스트 단위로 받아 느린 반면에 Buffer를 사용하면 버퍼에 텍스트를 저장한 후 전달하여 더 빠르다. 이해 하기 쉽게 비유하자면 1층에서 2층으로 가는 에스컬레이터가 있는데 한개씩 물건을 전달하는 것보다 카트에 물건을 담아 전달하는 것이 더 빠를 것이다. 따라서 알고리즘 문제와 같이 빠르게 값을 도출해야하는 문제가 있다면 Buffer를 이용해 푸는 것이 필요하다. 그러면 Buffer의 사용법을 알아보자.

import 선언

import java.io.BufferedReader;                                 
import java.io.BufferedWriter;                                   
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

BufferedReader의 객체 생성

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine(); // 문자열을 입력받음 값이 없을 때를 대비해 throwsException으로 예외처리 해주어야한다.
bf.close();

BufferedWriter의 객체 생성

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = "문자열";
bw.write(s+"\n"); // 전부 출력
bw.close();

백준15552번 Scanner 풀이

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        scan.nextLine();
        int[] sum = new int[n];
        for(int i = 0; i<n;i++){
            String test = scan.nextLine();
            String[] multiply = test.split(" ");
            int a = Integer.parseInt(multiply[0]);      
            int b = Integer.parseInt(multiply[1]);
            sum[i] = (a + b);
        }
        for(int i = 0; i<n; i++){
            System.out.println(sum[i]);
        }
        scan.close();
    }
}

백준15552번 Buffer풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine()); // 문자열을 입력받음
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int[] sum = new int[n];
        for(int i = 0; i<n;i++){
            String test = bf.readLine();
            String[] multiply = test.split(" ");
            int a = Integer.parseInt(multiply[0]);      
            int b = Integer.parseInt(multiply[1]);
            sum[i] = (a + b);
        }
        for(int i = 0; i<n; i++){
            bw.write(sum[i]+"\n");
        }
        bf.close();
        bw.close();
    }
}