문제 : 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';
}
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 23037 - 5의 수난 (boj java) (0) | 2022.06.22 |
---|---|
[자바] 백준 15688 - 수 정렬하기 5 (boj java) (0) | 2022.06.21 |
[자바] 백준 20053 - 최소, 최대 2 (boj java) (0) | 2022.06.20 |
[자바] 백준 10821 - 정수의 개수 (boj java) (0) | 2022.06.19 |
[자바] 백준 5656 - 비교 연산자 (boj java) (0) | 2022.06.18 |
댓글