국쥐의 개발 일상

백준(BOJ) 1225번 자바 풀이 본문

Algorithm

백준(BOJ) 1225번 자바 풀이

kuckjwi 2021. 9. 22. 10:32

문제

이상한 곱셈

 

설명

A*B를 계산하다 지겨워진 형택이는 A*B를 새로운 방법으로 정의하려고 한다.

A에서 한 자리를 뽑고 * B에서 임의로 한 자리를 뽑아 곱한다.

의 가능한 모든 조합 (A가 n자리, B가 m자리 수라면 총 가능한 조합은 n*m개)을 더한 수로 정의하려고 한다.

예를 들어 121*34는

1*3 + 1*4 + 2*3 + 2*4 + 1*3 + 1*4 = 28

이 된다. 이러한 형택이의 곱셈 결과를 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는다.

 

출력

첫째 줄에 형택이의 곱셈 결과를 출력한다.

 

풀이과정

A의 자릿수를 순회하면서 B의 자릿수를 계속 곱해서 더하면 간단히 풀릴 문제이다. (단 32bit 정수의 범위를 넘어 갈 수 있으므로 64bit 정수 자료형을 사용하여야 한다!) 하지만 필자는 조금 다른 방식으로 풀어보았다. A의 자릿수와 B의 자릿수를 곱해서 더하는거기 때문에 굳이 2중으로 루프를 돌지 않아도 A와 B의 자릿수를 각각 더한 후 더한 결과를 서로 곱해주면 된다!

예) 121 * 34 = (1 + 2 + 1) * (3 + 4) = 28

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    try (Scanner sc = new Scanner(System.in)) {
      String A = sc.next();
      String B = sc.next();

      char[] aChars = A.toCharArray();
      char[] bChars = B.toCharArray();

      long digitSum1 = 0;
      long digitSum2 = 0;

      for (char c : aChars) {
        digitSum1 += Character.getNumericValue(c);
      }

      for (char c : bChars) {
        digitSum2 += Character.getNumericValue(c);
      }

      System.out.println(digitSum1 * digitSum2);
    }
  }
}