알고리즘 모음(C++)

백준 2935 - 소음(C++) 본문

백준

백준 2935 - 소음(C++)

공대생의 잡다한 사전 2023. 6. 9. 23:57

문제 링크입니다. https://www.acmicpc.net/problem/2935

 

2935번: 소음

수업 시간에 떠드는 두 학생이 있다. 두 학생은 수업에 집중하는 대신에 글로벌 경제 위기에 대해서 토론하고 있었다. 토론이 점점 과열되면서 두 학생은 목소리를 높였고, 결국 선생님은 크게

www.acmicpc.net

더하기와 곱하기를 하는 문제입니다.

 

숫자의 자릿수가 최대 100이기에 일반적인 정수형 변수로는 구할 수 없습니다.

 

따라서 문자열을 통해 답을 구해야합니다.

 

곱하기의 경우에는 0의 개수만 샌 뒤, 이를 뒤에 붙여주기만 하면 됩니다.

 

더하기의 경우에는 2개 문자열의 0의 개수를 샌 뒤, 같다면 시작을 2로 하고 0을 붙여줍니다.

다르다면 해당 위치에 1을 놓기만 해주면 됩니다.

 

자세한 것은 코드를 참고해주세요.

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
#include <string>

using namespace std;

string x, y;
int zero_x, zero_y;
string add;

int main(){
    cin.tie(0);
    cout.tie(0);
    cin >> x >> add >> y;
    for(int i = 0; i < x.size(); i++){
        if(x[i] == '0') zero_x++;
    }
    for(int i = 0; i < y.size(); i++){
        if(y[i] == '0') zero_y++;
    }
    if(add == "*"){
        int zero = zero_x + zero_y;
        cout << "1";
        for(int i = 1; i <= zero; i++) cout << "0";
    }
    else{
        if(zero_x == zero_y){
            cout << "2";
            for(int i = 1; i <= zero_x; i++) cout << "0";
        }
        else{
            int maxi = max(zero_x, zero_y);
            int mini = min(zero_x, zero_y);
            cout << "1";
            for(int i = maxi; i >= 1; i--){
                if(i == mini + 1) cout << "1";
                else cout << "0";
            }
        }
    }
    return 0;
}

 

 

질문 및 조언은 댓글을 남겨주세요