본문 바로가기

Development/CodingTest

[Basic] Softeer Lv. 1 A+B java 풀이 (+ BufferedReader의 관해)

https://softeer.ai/practice/6295

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

Buffer

버퍼(buffer)는 데이터를 임시로 저장하는 메모리 영역을 말합니다.

주로 입출력 작업에서 사용되며, 데이터를 한 곳에서 다른 곳으로 전송하는 도중에 일시적으로 그 데이터를 보관하는 역할을 합니다.

예를 들어, 파일을 읽을 때 한 번에 한 바이트씩 읽는 것은 매우 비효율적입니다. 따라서 대부분의 입출력 라이브러리는 내부적으로 버퍼를 사용하여 한 번에 여러 바이트를 읽어옵니다. 그런 다음 필요할 때마다 이 버퍼에서 데이터를 가져와 사용합니다.

BufferedReader는 이런 방식으로 동작합니다. 내부적으로 문자 데이터를 저장하는 버퍼를 가지고 있으며, read() 메서드를 호출하면 이 버퍼에서 데이터를 가져옵니다. 버퍼가 비어 있을 때만 실제로 입출력 작업을 수행하므로, BufferedReader를 사용하면 작은 크기의 여러 번의 입출력 작업을 큰 크기의 몇 번의 입출력 작업으로 줄일 수 있습니다. 이로 인해 전체적인 성능 향상을 기대할 수 있습니다.

BufferedReader vs Scanner

성능

  • BufferedReader는 내부적으로 버퍼를 사용하여 데이터를 읽습니다. 이 버퍼 덕분에 대량의 데이터를 빠르게 읽을 수 있습니다.
  • 반면 `Scanner`는 버퍼링을 사용하지 않으므로 대량의 데이터를 처리할 때 비교적 느립니다.

 

기능

  • Scanner는 정규 표현식을 사용하여 입력을 파싱하고 다양한 타입의 데이터(예: int, long, double 등)를 읽는 메소드를 제공합니다.
  • 반면 BufferedReader는 문자열 데이터만 읽을 수 있습니다.

 

사용 용이성

  • Scanner는 사용법이 간단하므로 개발자들이 선호하는 경향이 있습니다. 반면 BufferedReader는 사용법이 약간 더 복잡하지만, 그만큼 더 유연하고 강력한 기능을 제공합니다.
  • 따라서 대량의 데이터를 빠르게 읽어야 하거나 성능이 중요한 경우에는 BufferedReader를 사용하는 것이 좋습니다.
  • 하지만 간단한 입력을 처리하거나 다양한 타입의 데이터를 읽어야 하는 경우에는 Scanner를 사용하는 것이 더 적합할 수 있습니다.

코드

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(in.readLine());
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int numOfCase = Integer.parseInt(st.nextToken());
        for (int i = 0; i < numOfCase; i++) {
            st = new StringTokenizer(in.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            bw.write(String.format("Case #%d: %d\n", i + 1, a + b));
            bw.flush();
        }
        bw.close();
    }
}