https://www.acmicpc.net/problem/1001
1001번: A-B
두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
Question
두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오.
Input
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
example input
3 2
Output
첫째 줄에 A-B를 출력한다.
example output
1
Answer
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 s = br.readLine();
StringTokenizer st = new StringTokenizer(s, " ");
int num1 = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());
System.out.println(num1 - num2);
}
}
Problem Solution
이전 포스팅에서 BufferedReader 클래스에 대해 알아보았기 때문에 BufferedReader를 사용했는데
입력값을 StringTokenizer라는 클래스로 문자열을 나눌 수 있다는 것을 알게 되어서 사용해보았다.
BufferedReader 클래스의 특징
- read() 메서드로 문자열의 한 문자만 읽어오거나,
- readLine() 메서드로 문자열의 한 행을 읽어올 수 있다.
StringTokenizer 클래스의 특징
- 변수에 저장한 문자열을 나눠준다.
- 나누는 기준을 설정해줘야한다. (ex. " ", /, *)
nextToken 메서드의 특징
- 문자열을 꺼내 반환하는 역할을 한다.
- 문제에서 주어진 데이터 타이벵 따라 타입을 사용한다.
Code Explanation
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
위처럼 BufferedReader 객체를 생성할 때 System.in이 들어가는데
System.in은 사용자로부터 입력을 바이트 단위로 받기 위한 입력 스트림이다.
사용자로부터 입력을 받기 위해서 Scanner같은 다른 입력 방식들도 System.in을 사용해야 한다.
String s = br.readLine();
readLine() 메서드로 문자열 한 행을 모두 읽어온다.
문자 하나를 읽어오는 read() 메서드를 사용할 수도 있지만, 여러 값을 입력으로 받고 싶을 때 사용이 어려워진다.
StringTokenizer st = new StringTokenizer(s, " ");
readLine()으로 문자열 한 행을 모두 읽어왔기 때문에 문자를 분리하기 위해서 StringTokenizer()를 사용하여 공백을 기준으로 문자열을 나눈다.
int num1 = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());
공백을 기준으로 나눈 문자열을 반환해주며, 이 문자열은 반환되는 즉시 객체에서 사라진다.