๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 10757๋ฒˆ : ํฐ ์ˆ˜

by nitronium102 2021. 9. 12.

๋ฌธ์ œ

๋‘ ์ •์ˆ˜ A์™€ B๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์Œ, A+B๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— A์™€ B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 < A, B < 10^10000)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— A+B๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด์ด๋‚˜ ์ˆซ์ž์˜ ๋ฒ”์œ„๋ฅผ ๋ณด๊ณ  ๋‹นํ™ฉํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•˜๊ฒŒ string์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด long ์ตœ๋Œ€ ๋ฒ”์œ„ + 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค >> ์“ฐ์ง€ ๋ง๋ผ๋Š” ๋ง)

 

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋งž์ถฐ์ค€ ํ›„ ๋’ค์—์„œ๋ถ€ํ„ฐ ํ•œ ์ž๋ฆฌ์”ฉ ์˜ฌ๋ฆผ ๊ณ„์‚ฐ์„ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. 

01. ๊ณ„์‚ฐ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด A๋ฅผ ๋” ๊ธด ๋ฌธ์ž์—ด๋กœ ๋†“๋Š”๋‹ค(optional)

02. ์ž๋ฆฟ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋ฉด ์•ž์— 0์„ ์ฑ„์›Œ์„œ ๋งž์ถฐ์ค€๋‹ค.

ex) 1234, 59 -> 1234, 0059

03. ๋์—์„œ๋ถ€ํ„ฐ ํ•œ ์ž๋ฆฌ์”ฉ ์˜ฌ๋ฆผ ๊ณ„์‚ฐํ•˜๊ธฐ

04. ๋’ค์ง‘์–ด์ฃผ๊ธฐ

#include <iostream>
#include <algorithm> // reverse
using namespace std;

int main(){
    // long long ์ž๋ฃŒํ˜• ๊ธธ์ด ์ดˆ๊ณผ -> string์œผ๋กœ ๋ฐ›๊ธฐ
    string a, b;
    cin >> a >> b;

    int lenA = a.length();
    int lenB = b.length();

    // 01. ๋ฌด์กฐ๊ฑด A ์ž๋ฆฟ์ˆ˜ ํฌ๊ฒŒ ๋งŒ๋“ค๊ธฐ
    if (lenB > lenA) {
        swap(a, b);
        swap(lenA, lenB);
    }

    // 02. ์ž๋ฆฟ์ˆ˜ ๋‹ค๋ฅด๋ฉด ๋งž์ถฐ์ฃผ๊ธฐ
    // ex) 1234, 0032
    string tmp = "";
    if (lenA != lenB){
        for (int i=0; i<(lenA-lenB); i++)
            tmp += "0";
    }
    b = tmp+b;

    // 03. ๋’ท์ž๋ฆฌ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋‚˜๋ˆ ์„œ answer์— ์ถ”๊ฐ€
    string ans = "";
    int carry = 0; // ์˜ฌ๋ฆผ
    int x, y, digit; // ์ž๋ฆฌ์ˆ˜
    for (int i=lenA-1; i>=0; i--){
        x = a[i] - '0';
        y = b[i] - '0';
        digit = x + y;
        if (carry == 1) {
            digit++;
            carry = 0;
        }
        if (digit > 9) // ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๊ฒฝ์šฐ
            carry = 1;
        ans += digit%10 + '0'; // to_string ์‚ฌ์šฉ X
    }

    // ์ถ”๊ฐ€๋˜๋Š” ํ•œ ์ž๋ฆฌ ex) 23+95 = (1)18
    if (carry == 1)
        ans += "1";


    // 1.1 ๋ฆฌ๋ฒ„์Šค ํ•จ์ˆ˜ ์‚ฌ์šฉ
//    reverse(ans.begin(), ans.end());
//    cout << ans;

    // 1.2 ๋งจ ๋’ค๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ์ถœ๋ ฅ(์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ ๋ ค)
    for (int i=ans.length() - 1; i>=0; i--){
        cout << ans[i];
    }

}

https://www.acmicpc.net/problem/10757

 

10757๋ฒˆ: ํฐ ์ˆ˜ A+B

๋‘ ์ •์ˆ˜ A์™€ B๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์Œ, A+B๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

์ฒ˜์Œ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๊ฐ์„ ๋ชป ์žก์•„์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ์ฝ”๋“œ ๊ฐœ์š”๋ฅผ ๋ณด๋ฉด์„œ ํ–ˆ๋‹ค! ์‰ฝ์ง€ ์•Š์•„

๋Œ“๊ธ€