[백준, 10998번] 4단계) A×B - JAVA 풀이
백준 [10998번] - A×B
https://www.acmicpc.net/problem/10998
10998번: A×B
두 정수 A와 B를 입력받은 다음, A×B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
# 문제 해설
A와 B를 입력받아 A×B를 하여 결과를 내는 것이 목표.
이전 3단계 문제에서 '연산 기호'만 변경하면 된다. ( * )
이번에 사용할 방법 또한,
- Scanner
- BufferedReader
이전 문제와 동일한 방법으로 풀이한다.
# 풀이 - Scanner
* Scanner
: 값을 입력받기 위한 클래스.
다시금 해당 클래스에 대해 정리하여 보면,
- Java.util 패키지에 포함되어 있다. (Java 프로그래밍에 유용한 클래스를 모아둔 패키지로, Date/Calendar/Collection 등이 있다.)
- 기본형(Primitive) 데이터 타입을 모두 받을 수 있다. (boolean, char, byte, short, int, long, float, double)
- 토큰(Token) 기준으로 데이터를 입력 받는다. (즉, 공백/개행/탭을 기준으로 데이터를 받아들인다.)
위와 같은 특징이 있음을 확인할 수 있다.
//데이터를 입력받기 위한 클래스
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 |
# 추가 풀이 (1) - BufferReader
* BufferReader
: Scanner와 유사한 기능 / 버퍼 사용, 속도에 있어 우위
이전 문제에서처럼, [BufferedReader].readLine 로 읽어들일 경우, 행을 모두 읽어오기에 이를 분리해주어야 한다.
- StringTokenizer
- Split()
위의 두가지 방법으로 분리하여 사용하고자 한다. (또 ...)
방법1. StringTokenizer 사용하기
+ 잠깐, Scanner도 토큰 기준으로 데이터를 받는다고 하지 않았나요?
Scanner 클래스의 특징을 위에서 설명하면서, Token(공백(" "), 개행(\n), 탭(\t)을 기준으로 받아온다.
이때 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," ");
// *** tip. String 선언 없이 사용 가능하다. (15, 18줄 해당)
//StringTokenizer st = new StringTokenizer(read.readLine()," ");
//토큰은 문자(문자열) 형태로 출력되기에 int로 변환한다.
int a = Integer.parseInt(str.nextToken());
int b = Integer.parseInt(str.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);
}
}