본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 2935 소음

by 까망 하르방 2021. 2. 25.
반응형

출처: https://www.acmicpc.net/problem/2935

 Input 

1000

*

100

 

 Output 

100000

A와 B는 10의 제곱 형태로 길이가 최대 100자리이므로 int와 long 보다는 문자열(string) 활용

10의 제곱 형태이므로 0의 개수에 관해 생각합니다.

 

▶ A * B의 경우

0의 개수 = {A 문자열 길이 - 1} + {B 문자열 길이 -1}

ex) 100 * 10,000 = 1000,000 ← 0의 개수 = (3 - 1) + (5 - 1) = 6

 

▶ A + B의 경우

- 문자열의 길이가 같은 경우는 결과가 A 혹은 B의 2배가 됩니다.

ex) 1000 + 1000 = 2000

 

- 문자열의 길이가 다른 경우

먼저, A와 B 중 문자열의 길이가 더 큰 숫자를 A로 둡니다. 

그 후 B에서 1로 표시되어 있던 지점을 A에도 표시해준다.

ex) 100 * 10000  10000 * 100 → 10100


#include <iostream>
#include <string>
using namespace std;
 
int main() {
    string A, B, result, temp;
    char op;
    cin >> A >> op >> B;
    
    int aLen = A.length(), bLen = B.length();
     // 곱셈 연산
    if(op == '*'){
        result = "1";
        for(int i=0; i< aLen-1 + bLen-1; i++){
            result += '0';
        }
 
        cout << result << '\n';
        return 0;
    }
 
    // 덧셈 연산
    if(aLen == bLen){
        result = A;
        result[0] = '2';
    }
    else{
        // A = B 보다 긴 문자열 (A 길이 > B 길이)
        if(aLen < bLen){
            temp = A;
            A = B;
            B = temp;
        }
        result = A;
        result[A.length() - B.length()] = '1';
    }
 
    cout << result << '\n';
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 2613 숫자 구슬  (0) 2021.02.25
[BOJ] 백준 6987 월드컵  (1) 2021.02.25
[BOJ] 백준 2822 점수 계산  (0) 2021.02.25
[BOJ] 백준 14225 부분수열의 합  (0) 2021.02.25
[BOJ] 백준 10815 숫자 카드  (0) 2021.02.25

댓글