Computer Science (CS)/알고리즘

[백준/Java] 10757번 큰 수 A+B

eune7 2023. 5. 20. 15:08
728x90
반응형

 

 

 

 

 

 

문제

 

 

 

정답 풀이

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(), " ");

        // 값을 받아서
        String strA = st.nextToken();
        String strB = st.nextToken();
        
        // 제일 긴 길이를 찾아서
        int maxLength = Math.max(strA.length(), strB.length());
        
        // 배열을 만들고
        int[] A = new int[maxLength+1];
        int[] B = new int[maxLength+1];

        // 값을 뒤에서부터 배열에 저장
        // 그래야 덧셈 계산할 때 편해요
        int index = 0;
        for(int i = strA.length()-1; i>=0;  i--, index++){
            A[index] = strA.charAt(i) - '0'; // 아스키코드 - '0'해야 제대로 값 나옴
        }

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

        // 덧셈 for문
        for(int i = 0; i < maxLength; i++){
            int value = A[i] + B[i]; // 더해서
            A[i] = value % 10; // 나머지는 그대로 저장
            A[i+1] += value/10; // 몫은 다음 덧셈할 거에 더해주기
        }

        // 거꾸로 계산했으니까 다시 돌려줘야함
        StringBuilder sb = new StringBuilder();
        
        // 제일 앞의 숫자가 0이면 넣으면 안되니까 체크
        if(A[maxLength] != 0) sb.append(A[maxLength]);

        // 뒤에서부터 순서대로 넣어주고
        for(int i = maxLength-1; i>=0; i--){
            sb.append(A[i]);
        }
        System.out.print(sb); // 출력

        br.close();
    }
}

덧셈 연산을 만들어주면 됩니다!

주석에 설명 달아놨으니 보시고 편하게 댓글로 질문 주세요 :)

 

 

 

 

 

728x90
반응형