-
[백준, 1000번] 2단계) A+B - JAVA 풀이Algorithm&BAEKJOON(백준)/1단계) 입출력과 사칙연산 2023. 4. 12. 14:32728x90
백준 [1000번] - A+B
https://www.acmicpc.net/problem/1000
1000번: A+B
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
# 문제 해설
A+B [1000] A와 B를 입력받아 두 값을 더한 결과를 출력하는 것이 목표.
# 풀이 - Scanner 클래스
* Scanner
: 값을 입력받기 위한 클래스
더보기2023.04.12 - [BAEKJOON(백준)/1단계) 입출력과 사칙연산] - [2557번] 1단계) Hello World - JAVA 풀이
[2557번] 1단계) Hello World - JAVA 풀이
* 이러니 저러니 해도 직접 구르는게 최고! 코딩 테스트, 알고리즘, CS... 맨날 생각만 하고 지나가는 하루였기에, 차근차근 조금씩이라도 수행하고 기록을 남겨보려 한다. 백준 [2557번] - Hello World
01-study-for-me.tistory.com
Scanner에 대한 더 자세한 설명은, 이전 문제 풀이에서 확인해보자.
//데이터를 입력받기 위한 클래스 import java.util.Scanner; public class Main { public static void main(String[] args) { //선언 Scanner scan = new Scanner(System.in); //System.in -> Byte 단위로 값을 읽음. int A = scan.nextInt(); //공백을 제외해서 읽음, int값을 받아들임. int B = scan.nextInt(); // 0 < A,B < 10 조건을 위해 if문을 사용할 수도 있다. //if((0<A && A<10) && (0<A && A<10)) { System.out.println(A+B); //} //Scanner 사용 후 close() scan.close(); } }
기본적으로 사용하는 방법이나, 속도는 느린편에 속한다.
또한, 공백 문자까지도 버퍼에 저장한다. 이러한 처리는 사용하는 메서드에 따라 차이가 있다.
더보기* Scanner의 매서드
메서드 기능 next() String nextLine() String, 띄어쓰기 포함. nextInt() int nextBoolean() boolean nextByte() byte nextShort() short nextLong() long nextFloat() float nextDouble() double * nextLine()은 다른 메서드와는 다른 특징을 가지고 있다. 이를 참고하여 사용하자.
[ 참고 : [Java] Scanner() 메서드 총정리 ]
+ 추가 풀이 참고 ( https://st-lab.tistory.com/12 )
# 추가 풀이 (1) - BufferReader
* BufferReader
: Scanner와 유사한 기능을 하나,
이는 모든 입력을 Char형으로, 버퍼를 사용해 받는다. 그렇기에 속도에서 매우 유리하다.
더보기Scanner의 경우, 입력을 읽는 과정에서
- 정규 표현식 적용
- 입력값 분할
- 파싱(Parsing) ...
위 과정을 제공하기에 속도에 있어 불리할 수 밖에 없다.
참고) [ BufferedRedaer를 알고 쓰자 ]
방법1. StringTokenizer 사용하기
//BufferedReader를 사용하기 위해 import 한다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { //선언 BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); //System.in 대신, Stream, Reader, File이 입력될 수 있다. // (1). String 생성 후 작업하기 String text = read.readLine(); //StringTokenizer - 문자열을 구분자로 쪼개어 저장한다. (토큰(Token) 형태로 저장) StringTokenizer str = new StringTokenizer(text," "); //토큰은 문자(문자열) 형태로 출력되기에 int로 변환한다. int a = Integer.parseInt(str.nextToken()); int b = Integer.parseInt(str.nextToken()); // (2). String 생성 (X), 입력된 데이터를 바로 구분자로 분리하기 /* StringTokenizer st = new StringTokenizer(read.readLine()," "); // String text = read.redaLine(); + StringTokenizer str = new StringTokenizer(text," "); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); */ System.out.println(a+b); } }
방법2. split() 사용하기
//BufferedReader를 사용하기 위해 import 한다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { //선언 BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); //System.in 대신, Stream, Reader, File이 입력될 수 있다. //split()을 사용해 한글자씩으로 쪼갬. String[] str = read.readLine().split(" "); //문자(문자열) 형태로 출력되기에 int로 변환한다. int a = Integer.parseInt(str[0]); int b = Integer.parseInt(str[1]); System.out.println(a+b); } }
* split()을 사용하는 경우, 문자열을 다루고 데이터 양이 많아지게 된다면 StringTokenizer보다 성능이 낮아질 수 있다.
결론적으로 Scanner보다 더 좋은 성능으로 문제를 해결하고자 한다면, BufferedReader를 통해 작업하면 된다.
728x90'Algorithm&BAEKJOON(백준) > 1단계) 입출력과 사칙연산' 카테고리의 다른 글
[백준, 10869번] 6단계) 사칙연산 - JAVA 풀이 (0) 2023.04.14 [백준, 1008번] 5단계) A/B - JAVA 풀이 (1) 2023.04.13 [백준, 10998번] 4단계) A×B - JAVA 풀이 (0) 2023.04.13 [백준, 1001번] 3단계) A-B - JAVA 풀이 (0) 2023.04.13 [백준, 2557번] 1단계) Hello World - JAVA 풀이 (0) 2023.04.12