Software Enginner ๐Ÿ‡ฏ๐Ÿ‡ต and ๐Ÿ‡ฐ๐Ÿ‡ท

Leetcode - Add Strings

Problem Add Strings
Difficulty Easy
Language Java
Time complexity $$O(max(n, m))$$
Space complexity $$O(max(n, m) + 1)$$

Problem,

Given two non-negative integers, num1 and num2 represented as string, return the sum of num1 andnum2 as a string.

You must solve the problem without using any built-in library for handling large integers (such as BigInteger). You must also not convert the inputs to integers directly.

Example 1:

Input: num1 = "11", num2 = "123"
Output: "134"

Example 2:

Input: num1 = "456", num2 = "77"
Output: "533"

Example 3:

Input: num1 = "0", num2 = "0"
Output: "0"

Solution,

๋‚œ์ด๋„ ์ตœํ•˜์˜ ๋ฌธ์ œ๋กœ ๋’ค์—์„œ ํ•˜๋‚˜์”ฉ ๋”ํ•ด๊ฐ€๋ฉด ๋์ด๋‹ค. ์‚ฐ์ˆ˜์˜ ์˜์—ญ(..)

  1. num1 ์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ์™€ num2 ์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๋”ํ•œ๋‹ค
  2. ๋‘ ์ง‘ํ•ฉ ๋ชจ๋‘ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ๋”ํ•œ๋‹ค

๋”ํ•  ๋•Œ 9๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์ž

num1 = "999"
num2 = "99999"

์ด๋ ‡๋‹ค๋ฉด,

9 + 9 = 18
1 + 9 + 9 = 19
1 + 9 + 9 = 19
...

๊ทธ๋Ÿฌ๋‹ˆ 10์„ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ฐ’์œผ๋กœ ์“ฐ๊ณ , ๋‚˜๋ˆˆ ๊ฐ’์„ ์˜ฌ๋ฆฐ๋‹ค. ๋ญ ํŽธํ•œ๋Œ€๋กœ (..) ๊ฑ 1 ์˜ฌ๋ ค๋„ ์ƒ๊ด€ ์—†๊ณ ์š”. carry = twoSum > 9 ? 1 : 0; ์ด๋ž˜๋„ ๊ดœ์ฐฎ์€๋ฐ ๋ญ.. ๋‚ด ์ทจํ–ฅ์€ ์•„๋‹ˆ๋‹ค.

class Solution {
    public String addStrings(String num1, String num2) {
        char[] alpha = num1.toCharArray();
        char[] beta = num2.toCharArray();
        var result = new StringBuilder();
        int alphaSize = alpha.length - 1;
        int betaSize = beta.length - 1;
        int carry = 0;
        for (;;) {
            if (alphaSize < 0 && betaSize < 0) break;
            int aResult = alphaSize >= 0 ? alpha[alphaSize] - '0' : 0;
            int bResult = betaSize >= 0 ? beta[betaSize] - '0' : 0;
            int twoSum = aResult + bResult + carry;
            int val = twoSum % 10;
            carry = val / 10;
            result.append(val);
            --alphaSize;
            --betaSize;
        }
        
        if (carry != 0) result.append(carry);
        
        return result.reverse().toString();
    }
    
}

๊ทน๊ฐ•์˜ ํšจ์œจ์„ ์›ํ•œ๋‹ค๋ฉด Native array ๋ฅผ ์จ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค๋งŒ ๋ฐฐ์—ด ์‚ฌ์ด์ฆˆ ๋Š˜๋ฆฌ๋Š”๊ฒŒ ๊ท€์ฐฎ๋‹ค.


๊ณต๊ฐ„ ๋ณต์žก๋„์˜ ๊ฒฝ์šฐ \(O(max(n, m))\) ์ด๊ธด ํ•˜๋‹ค. ์ž๋ฆฌ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋‹ˆ 1์„ ๋”ํ•˜๋Š” ๊ฒƒ๋„ ๋งž๋‹ค. Big-O ํ‘œ๊ธฐ๋ฒ•์— ์•ˆ๋งž์„ ๋ฟ.