현의 개발 블로그

프로그래머스 181846 두수의 합 자바 본문

프로그래밍 언어/자바 문제풀이

프로그래머스 181846 두수의 합 자바

hyun2371 2023. 7. 21. 12:37

문제

 

입출력 예시

숫자의 범위가 크므로 각 자리수를 더해 String으로 더해줘야 한다.

 

풀이

public String solution(String a, String b) {
        //b 길이가 더 크도록
        if (a.length()>b.length()){
            String tmp = a;
            a = b;
            b = tmp;
        }
   
        int sum = 0, carry = 0;
        String answer = "";
        
        for (int i =b.length()-1;i>=0;i--){
            if (i-(b.length()-a.length())>=0){
                sum = a.charAt(i-(b.length()-a.length()))+b.charAt(i)-96+carry;
            } else {
                sum = b.charAt(i)-48+carry;
            }
            
            carry = sum /10;
            sum %= 10;
            
            answer = String.valueOf(sum) + answer;
        }
        
        if (carry>0) //길이 같을 때 반올림
            answer = String.valueOf(carry) + answer;
        return answer;
    }

첫 번째 조건절은 a의 길이가 b보다 클 경우 swap(a,b)를 해주는 코드이다.

 

b와 a 각각 끝에서부터 더해주는데, a와 b의 길이가 다르다는 것에 주의해야 한다.

초기 i가 b의 끝이라고 할 때, a의 끝은 i-(len(a)-len(b))가 된다.

 

더할 때 10이 넘어가면 sum은 일의 자리수가 되고 carry=1이 된다.

따라서 더할 때 a,b 각 자리수와 함께 carry를 더해준다.

 

'0'을 정수화하면 48이므로 48을 빼주었다.

 

 

a와 b의 길이가 같고, (a의 첫번째 자리수+ b의 첫번째 자리수>0)인 경우를 처리하기 위해 마지막 조건절을 붙였다.

 

 

다른 풀이

BigInteger를 사용하면 쉽게 풀 수 있다.

public String solution(String a, String b) {
        String answer = "";
        
        BigInteger n1 = new BigInteger(a);
        BigInteger n2 = new BigInteger(b);
        answer += n1.add(n2);
        
        return answer;
    }

 

두 BigInteger 값을 더할 때는 add를 사용한다.

Comments