갓생살기프로젝트

[백준/BOJ/C++] 1225번 이상한 곱셈 - 문자열 본문

차근차근 알고리즘/etc.

[백준/BOJ/C++] 1225번 이상한 곱셈 - 문자열

Heeyeon.dev 2021. 2. 14. 02:11
728x90

 

1225번: 이상한 곱셈

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

www.acmicpc.net

1. 문제

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

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


2. 입력

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


3. 출력

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


4. 풀이

이 문제는 다양한 방법으로 풀이를 할 수 있겠지만, 쉽게 입력을 받고 쉽게 관리하기 위해서 숫자를 string으로 입력받은 다음 vector에 넣어 계산하는 코드로 작성을 하였다.

다만 vector에 push 해줄 때 string 클래스의 at 함수는 문자로 반환을 하기 때문에 정확한 숫자 값을 넣어주기 위해 '0'을 빼준다.

이 작업만 거쳐주면 조건에 맞체 for문으로 각각 하나씩 곱해서 result 변수에 더해준다.


5. 소스코드

#include <iostream>
#include <vector>
using namespace std;
int main(){
    vector<int> A;
    vector<int> B;
    string num, num2;
    cin>>num>>num2;
    for (int i = 0; i < num.size(); i++){
        A.push_back(num.at(i) - '0');
    }
    for(int i = 0; i < num2.size(); i++){
        B.push_back(num2.at(i) - '0');
    }
    
    long long result = 0;
    for(int i = 0; i < A.size(); i++){
        for(int j = 0; j < B.size(); j++){
            result += (A[i] * B[j]);
        }
    }
    cout<<result;
    return 0;
}

 

728x90