본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 두 수의 합

728x90

코드 힌트

  1. 문자열 길이 맞추기:
    • 두 문자열의 길이를 맞추기 위해 가장 긴 길이에 맞춰 왼쪽에 0을 추가합니다. 이를 위해 String.format()메소드를 사용하여 두 문자열을 동일한 길이로 만듭니다.
  2. 자리 수 계산:
    • 오른쪽 끝에서부터 시작하여 각 자릿수의 합을 계산합니다. 이때, 자릿수 올림을 고려하여 계산합니다.
  3. 올림 처리:
    • 각 자리의 합이 10 이상일 때, 올림을 설정하고 자릿수의 나머지를 계산합니다. 올림이 남아있는 경우에는 마지막에 추가합니다.
  4. 문자열 결과 변환:
    • 각 자릿수의 계산 결과를 StringBuilder에 추가한 후, 최종적으로 문자열을 역순으로 변환하여 반환합니다. 이는 오른쪽에서부터 계산했기 때문에 필요한 과정입니다.

 

 


정답은 더보기 클릭

더보기
class Solution {
    public String solution(String a, String b) {
        // 두 문자열의 길이 중 최대 길이를 계산합니다.
        int maxLen = Math.max(a.length(), b.length());
        
        // 두 문자열을 최대 길이에 맞추어 왼쪽에 0을 채워줍니다.
        a = LPAD(a, maxLen);
        b = LPAD(b, maxLen);
        
        // 결과를 저장할 StringBuilder를 초기화합니다.
        StringBuilder sb = new StringBuilder();
        
        // 자릿수 올림(carry)을 위한 변수 초기화
        int carry = 0;
        
        // 오른쪽 끝에서부터 각 자리의 합을 계산합니다.
        for (int i = a.length() - 1; i >= 0; i--) {
            // 각 자리 숫자를 더하고 올림을 포함합니다.
            int num = a.charAt(i) - '0' + b.charAt(i) - '0' + carry;
            
            // 자릿수 합이 10 이상이면 올림을 설정하고 자릿수의 나머지를 구합니다.
            if (num >= 10) {
                carry = 1;
                num %= 10;
            } else {
                carry = 0;
            }
            
            // 계산된 숫자를 결과에 추가합니다.
            sb.append(num);
        }
        
        // 마지막에 올림이 남아있으면 추가합니다.
        if (carry == 1) {
            sb.append(carry);
        }
        
        // 결과를 역순으로 변환하여 문자열로 반환합니다.
        return sb.reverse().toString();
    }
    
    // 문자열을 지정된 길이까지 0으로 왼쪽 패딩하는 메소드입니다.
    static String LPAD(String s, int len) {
        // 문자열의 길이가 목표 길이 이상이면 변경하지 않고 반환합니다.
        if (s.length() >= len) {
            return s;
        }
        
        // 필요한 0의 수를 계산하여 왼쪽에 추가합니다.
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < len - s.length(); i++) {
            sb.append("0");
        }
        sb.append(s);
        
        return sb.toString();
    }
}
728x90