Algorithm&BAEKJOON(백준)/1단계) 입출력과 사칙연산

[백준, 1000번] 2단계) A+B - JAVA 풀이

JE_:) 2023. 4. 12. 14:32
728x90

 


백준 [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 

: 값을 입력받기 위한 클래스 

 

//데이터를 입력받기 위한 클래스
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