[프로그래머스, 181846] 두 수의 합 (java)
Problem Solving/Programmers

[프로그래머스, 181846] 두 수의 합 (java)

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/181846

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

728x90

메모리: 96.9 MB, 시간: 18.28 ms

사용 알고리즘: 문자열

class Solution {
    public String solution(String a, String b) {
        
        // a와 b 뒤집어 저장
        a = new StringBuilder(a).reverse().toString();
        b = new StringBuilder(b).reverse().toString();
        
        StringBuilder answer = new StringBuilder();
        
        // 더 작은 자릿수를 가진 수의 자릿수만큼만 덧셈 수행
        int mod = 0, aa, bb;
        for(int i = 0; i < Math.min(a.length(), b.length()); i++) {
            aa = a.charAt(i) - '0';
            bb = b.charAt(i) - '0';
            
            answer.append((aa + bb + mod) % 10);
            mod = (aa + bb + mod) / 10;
        }
        
        // 더 긴 자릿수를 가진 수를 마저 더해줌
        for(int i = Math.min(a.length(), b.length()); i < a.length(); i++) {
            aa = a.charAt(i) - '0';
            
            answer.append((aa + mod) % 10);
            mod = (aa + mod) / 10;
        }
        for(int i = Math.min(a.length(), b.length()); i < b.length(); i++) {
            bb = b.charAt(i) - '0';
            
            answer.append((bb + mod) % 10);
            mod = (bb + mod) / 10;
        }
        
        // mod가 남아있다면 마저 더해줌
        if(mod != 0) answer.append(mod);
        
        // 뒤집어서 연산을 했기 때문에 다시 뒤집어서 리턴
        return answer.reverse().toString();
    }
}
728x90