본문 바로가기

JAVA-BAEKJOON/1단계 입출력과 사칙연산

[백준/01-02] 1000 A+B

NO.1000

문제

풀이코드

import java.util.Scanner;

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

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

 

 

📌 Scanner 사용하여 결과 출력에 성공했지만, 생각보다 시간이 오래 걸렸다.

      검색해보니 scanner 보다 시간효율이 좋은 BufferedReader 가 있어 비교해보았다.


 

💡 Scanner 란?

더보기

입력받은 데이터(바이트)를 다양한 타입으로 변환하여 반환

기본형과 String 타입을 정규표현식을 사용해 파싱(parse)

 

✨ 특징

  • java.util 패키지에 포함 (java.util.Scanner)
  • 공백(띄어쓰기) 및 개행(줄 바꿈)을 기준으로 읽음 (' ', '\t', '\r', '\n' 등)
  • 원하는 타입으로 읽기 가능
  • 버퍼사이즈 : 1024byte(1KB)
  • UnChecked(Runtime) Exception으로 별도로 예외 처리를 명시할 필요 X
  • Thread unsafe 성질 => 멀티스레드 환경에서 문제 발생 가능성
  • 데이터를 입력받을 경우 즉시 사용자에게 전송 & 입력받을 때마다 전송 => 많은 시간 소요(느림)

 

💡 BufferedReader 란?

더보기

데이터를 한번에 읽어와 버퍼에 보관한 후 버퍼에서 데이터를 읽어오는 방식

사용자가 입력한 문자 스트림을 읽는 것(read)

 

✨ 특징

  • java.io 패키지에 포함 (import java.io.BufferedReader)
  • 데이터를 파싱하지 않고 String으로만 읽고 가져옴
  • 버퍼 사이즈 : 8192byte(8KB)
  • Checked Exception으로 예외 처리 명시 必 (I/O Exception을 throw하거나 try/catch)
  • Thread safe 성질 => 멀티스레드 환경에서 안전
  • 버퍼 Full or 개행문자 나타나면 버퍼의 내용을 한번에 프로그램으로 전달 => 속도 빠름

 

참고

  • 문자열 읽어오는 방법
        - readLine() : 한 행을 읽어옴
        - read() : 한 문자만 읽어옴
     
  • 문자열 분리 방법
        - StringTokenizer(문자열, 구분자)  => 문자열 반환시 nextToken(); 사용
        - split(구분자)
  • 패키지 추가
        - import java.io.BufferedReader;
        - import java.io.IOException;
        - import java.io.InputStreamReader;
           - byte 대신 char 형태로 읽을 수 있음 => 아스키코드가 아닌 문자열로 출력 가능, String 객체로 변환 가능
        - import java.util.StringTokenizer;

 

📌 BufferedReader 를 사용하는 방법이 2개로 나뉘어 둘 다 실습해보았다.

 

BufferedReader 방법1 - StringTokenizer 로 문자열 분리 // 개인환경에서 실습한거라 public class Main 아님
BufferedReader 방법2 - split 으로 문자열 분리 // 개인환경에서 실습한거라 public class Main 아님


 

📌 확실히 시간이 200 밀리초대에서 130 밀리초대로 줄어들었다.

      필요할때 바로 쓸 수 있게 다른 예제에도 적용해서 연습해보자.

 

'JAVA-BAEKJOON > 1단계 입출력과 사칙연산' 카테고리의 다른 글

[백준/01-06] 10869 사칙연산  (0) 2024.02.16
[백준/01-05] 1008 A/B  (0) 2024.02.16
[백준/01-04] 10998 A×B  (2) 2024.02.15
[백준/01-03] 1001 A-B  (0) 2024.02.15
[백준/01-01] 2557 Hello World  (0) 2024.02.14