본문 바로가기
PS/BOJ

[자바, C#] 백준 1225 - 이상한 곱셈 (boj java csharp)

by Nahwasa 2022. 6. 21.

문제 : boj1225

 

  우선 최악의 경우는 99999....9(10000자리) 라는 수가 두개 있는 경우이다. 이 때 총 합은 9x9x10000x10000으로 81억이 되므로, 계산의 결과는 int로 표현할 수 없음을 알 수 있다. 따라서 결과 표현은 long으로 해줘야 한다. 또한 입력으로 들어온 A와 B는 10000자리까지 가능하므로 long으로도 당연히 표현이 불가하다. 어차피 각 자리의 수만 알면 되므로 String으로 입력받으면 문제 없다.

 

  즉, A와 B를 String으로 입력받은 뒤 각 자리의 가능한 모든 조합에 대해 character를 숫자로 변환해 곱해서 결과에 더해주는 과정을 코드로 옮겨주면 된다. 예를들어 A=abc, B=de라면(e.g. A가 211 이라면 a=2, b=1, c=1) 새로운 AxB의 정의에 의한 답은 다음과 같이 된다. 

 

 

코드(Java) : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        String a = st.nextToken();
        String b = st.nextToken();
        long sum = 0l;
        for (int i = 0; i < a.length(); i++) {
            for (int j = 0; j < b.length(); j++) {
                sum += (a.charAt(i)-'0')*(b.charAt(j)-'0');
            }
        }
        System.out.println(sum);
    }
    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

 

코드(C#) : github

using System;

namespace Prac {
    class Program {
        static void Main(string[] args) {
            string[] input = Console.ReadLine().Split(' ');
            long sum = 0;
            for (int i = 0; i < input[0].Length; i++) {
                for (int j = 0; j < input[1].Length; j++) {
                    sum += charToInt(input[0][i]) * charToInt(input[1][j]);
                }
            }
            Console.Write(sum);
        }

        static int charToInt(char c) {
            return c - '0';
        }
    }
}

댓글