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개로 나뉘어 둘 다 실습해보았다.
📌 확실히 시간이 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 |