프로그래머스 두 수의 합

KIMYEONGJUN·2026년 8월 1일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해 주세요.

내가 이 문제를 보고 생각해본 부분

solution 메서드는 두 개의 문자열 a와 b를 입력받는다. 두 문자열은 각각 0 이상의 정수를 나타낸다.
문자열의 뒷자리부터 한 자릿수씩 읽기 위해 각각 인덱스 i와 j를 a.length() - 1, b.length() - 1로 초기화한다.
carry 변수는 덧셈에서 발생하는 올림수를 저장하는 역할을 한다. 초기값은 0이다.
while 루프는 i, j가 음수가 될 때까지, 그리고 carry가 0이 될 때까지 반복한다. 즉, 두 수의 모든 자리수와 마지막 올림수까지 모두 처리할 때까지 반복하는 것이다.
반복문 내부에서 digitA는 a의 i번째 자리 숫자이며, 인덱스가 음수라면 0으로 처리한다. digitB도 마찬가지로 b의 j번째 자리 숫자를 가져오거나 0으로 간주한다.
sum은 digitA, digitB, 그리고 carry를 모두 더한 값이다.
carry는 sum / 10으로 다음 자리로 넘겨줄 올림수이다.
현재 자리의 숫자는 sum % 10로 계산하며, 이 값을 answer라는 StringBuilder에 추가한다.
i와 j는 각각 1씩 감소하여 다음 자리로 이동한다.
반복문 종료 후, answer는 현재 반대로 된 순서로 숫자가 저장돼 있으니 reverse()를 호출하여 올바른 순서로 뒤집는다.
최종 결과를 문자열로 변환하여 반환한다.

코드로 구현

class Solution {
    public String solution(String a, String b) {
        StringBuilder answer = new StringBuilder();

        int i = a.length() - 1;
        int j = b.length() - 1;
        int carry = 0;

        while (i >= 0 || j >= 0 || carry > 0) {
            int digitA = (i >= 0) ? a.charAt(i) - '0' : 0;
            int digitB = (j >= 0) ? b.charAt(j) - '0' : 0;
            
            int sum = digitA + digitB + carry;
            carry = sum / 10; 

            answer.append(sum % 10);

            i--;
            j--;
        }

        return answer.reverse().toString();
    }
}

프로그래머스 코드

package programmers;

// 프로그래머스 두 수의 합
public class Main99 {
    public static String solution(String a, String b) {
        StringBuilder answer = new StringBuilder();

        int i = a.length() - 1;
        int j = b.length() - 1;
        int carry = 0;

        while (i >= 0 || j >= 0 || carry > 0) {
            int digitA = (i >= 0) ? a.charAt(i) - '0' : 0;
            int digitB = (j >= 0) ? b.charAt(j) - '0' : 0;

            int sum = digitA + digitB + carry;
            carry = sum / 10;

            answer.append(sum % 10);

            i--;
            j--;
        }

        return answer.reverse().toString();
    }

    // main 메서드에서 테스트
    public static void main(String[] args) {
        // 테스트 케이스 예시
        String a1 = "582";
        String b1 = "734";
        System.out.println(solution(a1, b1));  // 출력: 1316

        String a2 = "18446744073709551615";
        String b2 = "287346502836570928366";
        System.out.println(solution(a2, b2));  // 출력: 305793246910280479981

        String a3 = "0";
        String b3 = "0";
        System.out.println(solution(a3, b3));  // 출력: 0
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글