[Baekjoon 2588번] 곱셈 문제풀이

반응형
728x90
반응형

백준 2588번 

1) 문제

 

2) 입력/출력 예제

 

 

 

 

제출 코드

import java.util.Scanner;
import java.util.stream.Stream;

public class M2588 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt(); // 472
        int B = sc.nextInt(); // 385

        /* 풀이 진행 */

        // 1) 입력값 배열로 변경
        int[] digitsA = Stream.of(String.valueOf(A).split(""))
					.mapToInt(Integer::parseInt)
					.toArray();
        int[] digitsB = Stream.of(String.valueOf(B).split(""))
					.mapToInt(Integer::parseInt)
					.toArray();

        // 2) 이중 for 문 실행
        int multiplyResult = 0;

        for (int i = digitsB.length; i > 0; i--) { // length : 3, 2, 1,,,
            int multiply = 0;

            for (int j = digitsA.length; j > 0; j--) {
                int n = digitsA.length - j; // 0, 1, 2,,,

                if (n == 0) {
                    multiply += digitsB[i - 1] * digitsA[j - 1];
                } else {
                    multiply += digitsB[i - 1] * digitsA[j - 1] * (Math.pow(10, n));
                }
            }

            System.out.println(multiply);
            int n2 = digitsB.length - i; // 0, 1, 2,,,

            if (n2 == 0) {
                multiplyResult = multiply;
            } else {
                multiplyResult += multiply * (Math.pow(10, n2));
            }
        }

        System.out.println(multiplyResult);
    }
}

 

 

 

 

 

설명

1) 입력된 숫자를 숫자형 배열로 변환
int[] digitsA = Stream.of(String.valueOf(A).split(""))
		.mapToInt(Integer::parseInt)
		.toArray();

 

2) 변수 설명

472 : digitsA

385 : digitsB

 

multiplyResult : 총 합을 출력할 값 (=181720)

multiply : 각 순서대로 출력할 값 (=2360, 3776, 1416)

 

 

2) 각 배열의 마지막 원소부터 시작하여 곱한다.

 

[1] 

multiply += digitsB[i - 1] * digitsA[j - 1];

 

-> digitsB[i - 1] = 5

-> digitsA[j - 1] = 2

= 10

 

multiply += digitsB[i - 1] * digitsA[j - 1] * (Math.pow(10, n));

 

-> digitsB[i - 1] = 5

-> digitsA[j - 1] = 7

= 35 * 10 = 350

= 350 + 10 = 360

 

multiply += digitsB[i - 1] * digitsA[j - 1] * (Math.pow(10, n));

 

-> digitsB[i - 1] = 5

-> digitsA[j - 1] = 4

= 20 * 100 = 2000

= 2000 + 360 = 2360

 

출력할 multiply = 2360

 

 

 

[2] 위 방식으로 계속 row를 출력한 후, 모든 row도 동일한 방식으로 구현

int n2 = digitsB.length - i; // 0, 1, 2,,,

 

digitsB.length - i 로 n2 값을 구한다.

 

multiplyResult = multiply;

 

= 2360

 

multiplyResult += multiply * (Math.pow(10, n2));

 

= 3776 * 10

 

multiplyResult += multiply * (Math.pow(10, n2));

 

= 1416 * 100

 

 

총 결과 : 2360 + 37760 + 141600 = 181720

 

 

반응형

Designed by JB FACTORY