BOJ[1225] - 이상한 곱셈 by JavaScript
이상한 곱셈
문제
언어
- JavaScript
순서도
- A 의 각 자리수 합 구하기
- B 의 각 자리수 합 구하기
- A 와 B 의 각 자리수 합의 곱 구하기
문제 풀이 step 1
A * B를 계산하는 데, 새로운 방법으로 계산합니다.- 새로운 방법은 A 의 각자리 수와 B 의 각 자리수를 곱할 수 있는 모든 경우를 다 곱하는 것입니다.
- 반복문을 사용하면서
O(A의 자리수 * B의 자리수)만에 구하는 방식도 있지만, 이보다 더 빠른 방법이 있습니다. - A = A1A2, B = B1B2 라고 할때,
A * B = A1 * B1 + A1 * B2 + A2 * B1 + A2 * B2입니다.- 위의 식을 정제하면,
A * B = A1 * (B1 + B2) + A2 * (B1 + B2)이고, - 이를 더 정제하면,
A * B = (A1 + A2) * (B1 + B2)입니다.
- 결과적으로,
A * B = (A1 + A2 + ...) * (B1 + B2 + ...)과 같은 식을 도출할 수 있고, 이 식을 이용해서 계산하면 정답입니다. - 추가 설명은 주석으로 작성하겠습니다.
후기
- 반복문 방식으로 계산해보고, 소요시간이 많이 나와서 다시 고민을 한 후에 위의 식에 도달할 수 있었습니다.
- 중학교 시절 수학 문제가 생각나는 문제였습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const [a, b] = input[0].split(" ").map((v) => v.split("").map(Number));
// A 의 각 자리수의 합과 B 의 각자리수의 합 곱하기
return a.reduce((ac, v) => ac + v) * b.reduce((ac, v) => ac + v);
};
console.log(solution(input));