백준/Java

[백준 자바] 1000번(A+B) | Scanner, BufferedReader, System.in.read()의 차이 | 문자형을 정수로 변환

gamzaggang7 2024. 2. 21. 23:25
728x90

난이도 - 브론즈 5

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

첫째 줄에 A+B를 출력한다.

 

 


 

 

728x90

 

자바에서 사용자 입력 받는 방법은 Scannew, BufferedReader, System.in.read() 이렇게 있다.

 

1. Scanner

scanner 클래스는 텍스트 기반의  입력을 처리하는 데 사용된다. 주로 공백이나 줄바꿈을 기준으로 데이터를 읽어온다.

사용이 편하고 다양한 데이터 타입을 읽을 수 있지만 입력이 많은 경우에는 느릴 수 있다.

 

사용 예)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int A, B;
        
        Scanner scanner = new Scanner(System.in);

        A = scanner.nextInt();
        B = scanner.nextInt();

        System.out.println(A + B);
    }
}

 

2. BufferedReader, BufferedWriter

BufferedReader 클래스는 텍스트 기반의 입력을 처리하는 데 특화되어 있다.

버퍼를 사용하기 때문에 입출력 성능이 향상되고 문자열을 한 줄씩 읽어오기 용이하다. 하지만 데이터 타입에 따라 형 변환이 필요하며 다른 방법들에 비해 코드가 조금 더 길어지고 복잡해질 수 있다.

 

사용 예)

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

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());

        bw.write(String.valueOf(A + B));
        bw.flush();
        br.close();
        bw.close();
    }
}

메모리랑 시간이 확 줄기 때문에 난 스캐너보다 이거 주로 씀

 

3. System.in.read()

이 메서드는 한 번에 하나의 바이트씩 입력을 받는다. 때문에 주로 문자 입력받을 때 사용된다.

간단하고 빠르게 입력 처리할 수 있지만 문자열 읽을 때는 반복문 사용해야 하고 문자열로 변환해야 한다.

 

사용 예)

public class Main {
    public static void main(String[] args) throws Exception {
        int A = System.in.read() - 48;
        System.in.read();
        int B = System.in.read() - 48;

        System.out.println(A+B);
    }
}

입력값에 공백도 있어 가운데에 한번 더 읽어준다.

입력받고 48을 빼는 이유는 read() 메소드는 값을 문자형으로 받기 때문

따라서 0의 아스키코드값인 48을 빼줘야 원하는 결과가 나온다.

- '0'으로 해도 같다.

public class Main {
    public static void main(String[] args) throws Exception {
        int A = System.in.read() - '0';
        System.in.read();
        int B = System.in.read() - '0';

        System.out.println(A+B);
    }
}

 


 

728x90