-- 예전 기록/BOJ

[ BOJ ] 1225 : 이상한 곱셈 ( BRONZE 2 ) / C, Python

rejo 2023. 10. 10. 10:50

문제

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자리를 넘지 않는 음이 아닌 정수이다. 수가 0인 경우에는 0만 주어지며, 그 외의 경우 수는 0으로 시작하지 않는다.

출력

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

풀이 과정

10000 자리의 숫자를 정수 자료형으로 입력받아 한 자리씩 떼어 내서 계산하는 건 구현량 부분에서 까다로워진다. 따라서 A와 B를 문자열로 입력받아 한 자리씩 곱셈한다. 이중 반복문을 사용하여, A[i] x B[j] ( i : 0 ~ strlen(A) - 1 / j : 0 ~ strlen(B) - 1 ) 의 계산 결과를 전부 더한다.

C

#include <stdio.h>
#include <string.h>

char a[10001];
char b[10001];
int main(void) {
    scanf("%s %s", a, b);
    
    long long result = 0;
    for (int i = 0; i < strlen(a); i++) { 
        for (int j = 0; j < strlen(b); j++) {
            result += (a[i] - '0') * (b[j] - '0');
        }
    }
    printf("%lld", result);
    return 0;
}

계산 결과가 int의 범위를 넘어갈 수 있다는 점을 유의하자.

Python

import sys
input = sys.stdin.readline

aArr, bArr = input().rstrip().split()
result = 0
for a in aArr:
    for b in bArr:
        result += (int(a) * int(b))
print(result)