백준 2588 자바(Java) 풀이 방법
백준 2588번 사칙연산의 곱셈 문제를 풀어보았고 그에 대한 나만의 풀이법을 기록하고자 한다.
풀이방법은 여러가지가 있겠으나, 나는 받은 숫자를 문자열 자르기를 하지 않고 수학적으로 풀어보려고 고민을 해보았다.
백준 2588번 문제
백준 2588번 자바(Java) 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num1 = Integer.parseInt(br.readLine());
int num2 = Integer.parseInt(br.readLine());
br.close();
ArrayList<Integer> targetNumArray = functionA(num2);
int result = 0;
for (int i = 0; i < targetNumArray.size(); i ++)
{
result += num1 * targetNumArray.get(i) * Math.pow(10, i);
System.out.println(num1 * targetNumArray.get(i));
}
System.out.println(result);
}
// 받은 수의 자리수 배열 반환 함수
public static ArrayList<Integer> functionA(int num)
{
ArrayList<Integer> arrNum = new ArrayList<Integer>();
while (num > 0)
{
arrNum.add(num % 10);
num /= 10;
}
return arrNum;
}
}
백준 2588번 자바(Java) 풀이 방법
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num1 = Integer.parseInt(br.readLine());
int num2 = Integer.parseInt(br.readLine());
br.close();
먼저 나는 Scanner로 입력받는 방식보다 성능면에서 더 좋은 InputstreamReader를 통해 두 수를 입력 받았다.
// 받은 수의 자리수 배열 반환 함수
public static ArrayList<Integer> functionA(int num)
{
ArrayList<Integer> arrNum = new ArrayList<Integer>();
while (num > 0)
{
arrNum.add(num % 10);
num /= 10;
}
return arrNum;
}
그 후에 functionA 라는 함수를 만들어 파라미터로 넘겨받은 수에 대한 각 자리 수를 배열로 반환하였다.
예를들어 385 라는 숫자가 들어오면 [ 5, 8, 3 ] 의 순서로 배열을 반환한다.
문제에서 1의 자리 숫자부터 입력받은 최고 자리의 숫자까지 곱한 수를 차례로 출력해야 했기 때문에 오히려 1의 자리 숫자부터 배열을 집어 넣어 나중에 배열의 순서대로 곱해주면 되서 편했다.
ArrayList<Integer> targetNumArray = functionA(num2);
int result = 0;
for (int i = 0; i < targetNumArray.size(); i ++)
{
result += num1 * targetNumArray.get(i) * Math.pow(10, i);
System.out.println(num1 * targetNumArray.get(i));
}
System.out.println(result);
그렇게 functionA 함수로부터 리턴된 targetNumArray인 [ 5, 8, 3 ] 배열은 for문을 통해 각 자리수별로 처음 입력받은 472 숫자와 곱해주어 출력하였는데, 이 때 각 자리수별 10의 제곱수를 구하는 방식은 Math.pow() 함수를 사용하였다.
Math.pow() 함수는 java.lang.Math 클래스로 거듭 제곱을 구할 수 있는 함수이다.
예를들어 Math.pow(10, 2)는 10의 거듭제곱 수인 100을 계산해준다.
더 다양하고 좋은 방법들이 있겠지만 나만의 풀이법을 기록용으로 기록해두었다!
'알고리즘' 카테고리의 다른 글
백준 5086번 자바(JAVA) 배수와 약수 (0) | 2023.08.26 |
---|---|
백준 11382번 자바(Java) 꼬마 정민 풀이 (0) | 2023.04.22 |
백준 알고리즘 1008번 입출력 사칙연산 단계 메모리 / 시간 (0) | 2023.04.15 |