백준 2935 (C++) 소음 (출력 초과, 틀렸습니다)
728x90
SMALL

아이디어

풀면서 재밌었던 구현 문제다.

숫자가 최대 100자리까지 주어진다고 했으므로 우리가 알고 있는 일반적인 변수크기로는 택도 없다.

따라서 string으로 a, b 변수를 만들고 어떻게 연산할 것인지 고민해보자.

 

우선 곱셈은 간단하다.

곱셈은 자릿수끼리의 덧셈이므로 string a와 b의 size(또는 length)의 덧셈만큼 0을 출력하면 된다.

 

 

덧셈에서는 경우의 수가 세가지이다

1. a > b
2. a < b
3. a == b

1. 의 경우 a.size() - b.size() - 1만큼 자릿수(0)를 출력한다. 

2. 의 경우도 1과 마찬가지이다.

3. 의 경우는 "2"를 출력하고 수의 자릿수 -1만큼 "0"을 출력하면 된다.

 

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
using ll = long long;
const int INF = 1e8;
const int MAX = 500003;
string a,b;
char c;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    cin >> a >> c >> b;
    if (c == '*') { // 곱셈
        cout << "1";
        for (int i = 0; i < a.size() + b.size() - 2; i++) {
            cout << "0";
        }
    }
    else { // 덧셈
        if (a.size() > b.size()) { // case 1
            cout << "1";
            for (int i = 0; i < a.size() - b.size() - 1; i++) {
                cout << "0";
            }
            cout << "1";
            for (int i = 0; i < b.size() - 1; i++) {
                cout << "0";
            }
        }
        else if (a.size() < b.size()) { // case 2
            cout << "1";
            for (int i = 0; i < b.size() - a.size()- 1; i++) {
                cout << "0";
            }
            cout << "1";
            for (int i = 0; i < a.size() - 1; i++) {
                cout << "0";
            }
        }
        else { // case 3
            cout << "2";
            for (int i = 0; i < a.size()-1; i++) {
                cout << "0";
            }
        }
    }
    return 0;
}

 

 

 

 

728x90
LIST