관리 메뉴

LC Studio

백준 10757 큰 수 A+B (JAVA) 본문

Java/백준 알고리즘

백준 10757 큰 수 A+B (JAVA)

Leopard Cat 2022. 3. 21. 11:54

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

정수의 최대 범위인 long의 범위(-2^63 ~ 2^63-1)를 넘어서는 범위이다.

어떻게 계산할까 고민하다 배열을 만들어서 해결해야겠다 생각했다.

 

하지만 덧셈을 역순으로 어떻게 해야할지 고민하다 결국 다른 블로그의 도움을 받았다.

https://st-lab.tistory.com/199

 

[백준] 10757번 : 큰 수 A+B - JAVA [자바]

www.acmicpc.net/problem/10757 10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 Java로 풀 경우 매우 쉽게 풀 수 있는 문제다. 알고리즘 [접근..

st-lab.tistory.com

 

애초에 배열을 역순으로 저장하면 되는 것이었다. 허허....

 

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());
        //StringTokenizer를 이용하여 A, B를 입력받는다.
        String A = (st.nextToken());
        String B = (st.nextToken());

        //max_length에 A,B 중 더 긴 값을 저장한다.
        int max_length = Math.max(A.length(), B.length());

        //최고자리수의 합이 10을 넘을 수 있기 때문에 +1로 여유공간을 만들어 배열을 선언해준다.
        int[] Aarr = new int[max_length+1];
        int[] Barr = new int[max_length+1];
        
        //Aarr 배열을 생성하여, A를 역순으로 저장한다
        for(int i = A.length()-1,idx=0; i>=0; i--,idx++){
            Aarr[idx] = A.charAt(i)-'0';
        }

        //Barr 배열을 생성하여, B를 역순으로 저장한다
        for(int i = B.length()-1,idx=0; i>=0; i--,idx++){
            Barr[idx] = B.charAt(i) - '0';
        }

        //Aarr배열을 중심으로 계산을 진행
        //Aarr과 Barr을 더하고
        //%10을 활용해
        //더한값이 10을 넘는 경우와 넘지 않는 경우를 한번에 처리해준다.
        //그리고 value/10을 해주어
        //더한값이 10을 넘는다면 다음 배열(i+1)에 저장해준다.
        for(int i = 0; i < max_length; i++) {
            int value = Aarr[i] + Barr[i];
            Aarr[i] = value%10;
            Aarr[i+1] += (value/10);
        }

        //StringBuilder의 append를 통해 문자열을 저장해서 출력해준다.
        StringBuilder sb = new StringBuilder();

        //만약 최댓값이 0이 아니라면,
        //즉, 최고자리수의 합이 10을 넘는다면 출력해준다.
        if(Aarr[max_length] != 0){
            sb.append(Aarr[max_length]);
        }
        //나머지를 차례대로 출력해준다.
        for(int i = max_length -1; i>=0; i--){
            sb.append(Aarr[i]);
        }
        System.out.println(sb);

    }
}

 

반응형