아인띠
Hello, Ain!
아인띠
  • 분류 전체보기 (23)
    • 사담🌹 (1)
    • Basic (7)
      • 알고리즘 (4)
    • Front (1)
      • React (1)
    • Back (9)
      • Java (5)
      • DATABASE (3)
      • JSP (1)
      • Python (0)
    • ETC (5)
      • Unity(C#) (2)

인기 글

티스토리

hELLO · Designed By 정상우.
아인띠

Hello, Ain!

Basic/알고리즘

백준알고리즘 15552번 / Scanner, BufferedReader

2021. 7. 18. 02:26

❓

백준 알고리즘문제를 풀기 시작하고, 아래와 같은 글을 읽게 되었다.

Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush 는 맨 마지막에 한 번만 하면 된다.

 

그 전까지의 문제를 Scanner와 System.out.println을 이용하여 풀었기 때문에, 위의 문장에 대해 한번에 이해할 수 없어 공부해야 할 필요성을 느끼게 되었다.

 

❗

 

1. Scanner, System.out.println?

1.1 Scanner

- java.util.Scanner에 포함된 클래스

- 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽는다.

- 기본 사용법

import java.util.Scanner;

Scanner scanner = new Scanner(System.in);

scanner.close();

* 여기서 System.in은, 키보드와 연결된 자바의 표준 입력 스트림

* Scanner에 대한 자세한 설명은 생략한다.

 

1.2. System.out.println

- java.lang 패키지에 포함되어 제공된다.

- 자바 표준 입출력 클래스

 

2. BufferedReader, BufferdWriter?

- Buffer에 있는 IO 클래스

- 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링 된 후 전달된다.

- 시스템의 데이터처리 효율성을 높여준다.

- 기본 사용법

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//선언

* 각 사용법에 대한 자세한 설명은 생략한다.

 

2.1. BufferedReader

- Enter만 경계로 인식하며, 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요한 경우가 많다. (Scanner에 비해 사용하기는 불편한 편)

- 하지만, 많은 양의 데이터를 입력받는 경우 효율면에서 훨씬 낫다

 

- 리턴값이 String으로 고정되므로, 다른 타입으로 입력받으려면 형변환이 필요하다

- 반드시 예외처리를 해주어야 한다.

 

2.2. BufferedWriter

- flush(), close()를 반드시 호출해주어 뒤처리를 해주어야 한다.

- 자동 개행 기능이 없기 때문에 개행이 필요한 경우 \n 을 통해 따로 처리해주어야 한다.

 

3. 차이점?

- 버퍼를 사용하지 않는 입력의 경우, 키를 누르는 즉시 바로 프로그램으로 전달된다. (+ 입력받은 즉시 자료형이 확정된다)

- 버퍼를 사용하는 입력의 경우, 키보드의 입력이 있을 때마다 한 문자식 버퍼로 전송한다. 버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한번에 전송한다.

 

 

4. 그래서, 어떻게 사용하는거지?

- 백준 알고리즘 15552번 문제

 

4.1. Scanner와 System.out.println을 이용한다면 아래와 같이 풀었을 것......

import java.util.*;

public class Main{
	public static void main(String args[]){
		
		Scanner sc = new Scanner(System.in);
		int T;
		T = sc.nextInt();
		
		for(int i = 0; i < T; i++) {
			int A,B;
			A = sc.nextInt();
			B = sc.nextInt();
			System.out.println(A+B);
		}
		
	}
}

 

 

4.2. BufferedReader, BufferedWriter를 사용해보자

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
		//BufferedReader, BufferedWriter 사용시 예외처리 필수
		
		//생성자
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
		//키보드를 통해 입력받기
		int N = Integer.parseInt(br.readLine());
        
		//bufferReader 클래스의 메서드로 입력을 읽을 때, 라인 단위로 읽게 된다.
		//특정 문자에 따라 문자열을 나누고 싶을 때 StringTokenizer를 이용하게 된다.
		StringTokenizer st;
 
		for (int i = 0; i < N; i++) {
			//new StringTokenizer(문자열, 구분자): 구분자를 기준으로 문자열 분리
			st = new StringTokenizer(br.readLine()," ");
			//반환되는 타입이 String이므로, 형변환 (Integer.parseInt)
			//형변환한 두 토큰을 더하여 BufferedWriter.write()에 담기
			bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()))+ "\n");
		}
		//버퍼 닫기
		br.close();
        
		//버퍼 비우기, 닫기
		bw.flush();
		bw.close();
 
	}
}
저작자표시 (새창열림)

'Basic > 알고리즘' 카테고리의 다른 글

[Programmers] 신고 결과 받기 / HashSet, HashMap  (0) 2023.01.06
소수점 자르기, 백분율 구하기 / 백준 4344번  (0) 2021.08.02
JAVA sort() , copyOfRange() / 프로그래머스 K번째 수  (0) 2021.07.28
    'Basic/알고리즘' 카테고리의 다른 글
    • [Programmers] 신고 결과 받기 / HashSet, HashMap
    • 소수점 자르기, 백분율 구하기 / 백준 4344번
    • JAVA sort() , copyOfRange() / 프로그래머스 K번째 수
    아인띠
    아인띠
    https://github.com/aine-jeong

    티스토리툴바