[백준] 10757 큰 수 A+B - Java

Yunki Kim·2022년 12월 15일
0

백준

목록 보기
63/104
post-thumbnail

문제


링크


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        br.close();

        String stringA = st.nextToken();
        String stringB = st.nextToken();
        int length = Math.max(stringA.length(), stringB.length());

        int[] arrayA = new int[(length + 1)];
        int[] arrayB = new int[(length + 1)];

        for (int i = (stringA.length() - 1), index = 0; i >= 0; i--, index++) {
            arrayA[index] = stringA.charAt(i) - '0';
        }

        for (int i = (stringB.length() - 1), index = 0; i >= 0; i--, index++) {
            arrayB[index] = stringB.charAt(i) - '0';
        }

        for (int i = 0; i < length; i++) {
            int sum = arrayA[i] + arrayB[i];
            arrayA[i] = sum % 10;
            arrayA[(i + 1)] += sum / 10;
        }

        StringBuilder sb = new StringBuilder();
        if (arrayA[length] != 0) sb.append(arrayA[length]);
        for (int i = (length - 1); i >= 0; i--) {
            sb.append(arrayA[i]);
        }
        System.out.println(sb);
    }
}

리뷰

본격 쉬운문제 어렵게 풀기(?)

사실 Java 클래스 중 매우 큰 정수를 사용할 때 쓰라고 만들어둔 BigInteger가 있다.
그런데 다른 풀이 중에 알고리즘 문제니까 기왕 구현해보는게 좋지 않을까라는 말이있어서 뭔가에 이끌려 다시 풀게되었다.

문자열로 저장해놓고 역순으로 숫자배열에 담는다.
이 때 배열의 크기는 덧셈에 의해 올림이 발생하면 한칸이 더 필요해서 두 수 중 긴 값보다 한 칸 크도록 만들었다.

그리고 배열에 담아놓고 첫번째 칸부터 계산하고 역순으로 담았으니 출력할 때도 역순으로 출력하였다.
올림이 발생하지 않았을 경우 0이 출력되므로 마지막 칸의 값이 0이 아닌 경우 출력하도록 하면 끝!

0개의 댓글