백준 알고리즘/입출력

백준 1001번 :: A-B

Sun720 2022. 5. 14. 21:54

▶ 문제

https://www.acmicpc.net/problem/1001

 

1001번: A-B

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

www.acmicpc.net

 설명

사용자에게서 두 수를 입력 받아서 빼기를 한 후 결과 값을 반환하는 문제이다.

입력받기 위해서 Scanner나  BufferedReader 클래스를 이용할 수 있다.

두 수를 입력받을 때 공백을 기준으로 구분하는 방법은 각 클래스마다 상이하다.

 

Scanner는 nextInt()메소드를 이용하면 되고,

BufferedReader는 StringTokenizer 클래스나 split( ) 메소드를 이용하여 공백으로 두 수를 구분할 수 있다.

먼저 BufferedReader부터 살펴보고자 한다.

문제 풀이

🌱 풀이1. BufferedReader, StringTokenizer  사용 

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 br = new BufferedReader(new InputStreamReader(System.in));
        
        String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str, " ");
        
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        
        System.out.println(a-b);
    }
}

BufferedReader 클래스를 보면  BufferedWriter 가 연상된다.

BufferedWriter는 출력할 때, BufferedReader는 입력받을 때 사용된다. 

 

BufferedReader 클래스를 선언하려면 InputStreamReader 를 이용해야 한다. BufferedWriter 선언할 때 OutputStreamWriter를 포함했던 것과 상응한다.

 

readLine() 메소드를 이용하여서 입력받은 한 줄을 str 변수에 담는다.

이 메소드는 문자열을 반환하기 때문에 반환 값을 받는 변수의 타입을 꼭 문자열 String으로 맞춰 주어야 한다.

 

StringTokenizer 클래스를 선언하면서 공백을 기준으로 문자를 자르겠다는 것을 " " 로 입력하도록 한다.

 

그렇게 문자열이 공백으로 잘려졌다면 순서대로 변수 a와 b에 담도록 한다. 

a와 b에 담긴 값을 가지고 뺄셈을 하기 위해서는

타입이 원래 문자열로 되어 있는 변수들을 int로 변환하는 Integer.parseInt 메소드를 이용하도록 한다.

 

다음은 BufferedReader 의 메소드이다.

 

 

 

🌱 풀이2. BufferedReader, split( ) 사용 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String[] str = br.readLine().split(" ");
        
        int a = Integer.parseInt(str[0]);
        int b= Integer.parseInt(str[1]);
                                    
        System.out.println(a-b);
    }
}

이번 코드는 split( ) 메소드를 이용한 방식이다.

split( ) 로 잘린 입력 문자들은 str 문자배열에 속하게 된다.

뺄셈을 위해 str의 요소들을 int 타입으로 변환시켜 각각 a,b 변수에 담으면 된다.

 

🌱 풀이2. Scanner 사용

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        
        System.out.println(a-b);
        sc.close();
    }
}

Scanner 클래스는 자바를 배우면서 처음에 많이 사용했던 입력 방식이다.

하지만 BufferedReader 가 성능면에서 더 좋기 때문에 실제 백준을 풀 땐 잘 사용하지 않고 있다.

 

거의 2배 정도 시간 차이가 나는데 많은 데이터를 다루게 될 땐 더 성능 차이가 벌어지지 않을까 한다.

 

Scanner 클래스를 사용하려면 BufferedReader와 마찬가지로 System.in을 같이 입력해주어야 한다.

nextInt( ) 메소드를 사용하므로써 따로 형변환을 하지 않아도 바로 정수로 변수에 담을 수가 있다.

코드를 사용하는 데 더 간결하다.

Log

 

 

더 풀어보기

비슷한 문제로 3개 정도 있다.

 

https://www.acmicpc.net/problem/1000

 

1000번: A+B

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

www.acmicpc.net

https://www.acmicpc.net/problem/10998

 

10998번: A×B

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

www.acmicpc.net

https://www.acmicpc.net/problem/1008

 

1008번: A/B

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

www.acmicpc.net

 

728x90
반응형

'백준 알고리즘 > 입출력' 카테고리의 다른 글

백준 10926번 :: ??!  (0) 2022.05.14
백준 10869번 :: 사칙연산  (0) 2022.05.14
백준 25083 :: 새싹  (0) 2022.05.14
백준 10171 :: 고양이  (0) 2022.05.13
백준 10718 :: We love kriii  (0) 2022.05.13