코린이의 소소한 공부노트

[LeetCode/Easy] 415. Add Strings 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 415. Add Strings

무지맘 2023. 5. 19. 12:27

1. Input

1) String num1

2) String num2

 

2. Output

1) num1num2의 합을 문자열로 반환

- BigInteger와 같은 빌트인 라이브러리 사용 금지

 

3. Constraint

1) 1 <= num1.length, num2.length <= 10^4

2) num1num2는 숫자로만 이루어져 있다.

3) num1num2에는 불필요한 0은 없다.

 

4. Example

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

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

 

5. Code

1) 첫 코드(2023/05/19)

class Solution {
    public String addStrings(String num1, String num2) {
        Stack<Integer> stack = new Stack<>();
        int carry = 0, i1 = num1.length()-1, i2 = num2.length()-1;
        while(i1>=0 || i2>=0){
            int x = carry;
            if(i1>=0)
                x += num1.charAt(i1--)-'0';
            if(i2>=0)
                x += num2.charAt(i2--)-'0';
            if(x>=10){
                carry = 1; x -= 10;
            } else
                carry = 0;
            stack.push(x);
        }
        StringBuilder sb = new StringBuilder();
        if(carry==1)
            sb.append(1);
        while(!stack.empty())
            sb.append(stack.pop());
        return sb.toString();
    }
}

 

2) 1번이 너무 구려서 다시 해본 코드(2023/05/19)

class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        int carry = 0, i1 = num1.length()-1, i2 = num2.length()-1;
        while(i1>=0 || i2>=0){
            int x = carry;
            if(i1>=0)
                x += num1.charAt(i1--)-'0';
            if(i2>=0)
                x += num2.charAt(i2--)-'0';
            if(x>=10){
                carry = 1; x -= 10;
            } else
                carry = 0;
            sb.append(x);
        }
        if(carry==1)
            sb.append(1);
        return sb.reverse().toString();
    }
}

- 성능이 압도적으로 좋아졌다.