뚱땅뚱땅

[문제] 백준 10757번 큰 수 A+B 본문

알고리즘/백준

[문제] 백준 10757번 큰 수 A+B

양순이 2021. 1. 25. 21:05
728x90

* 출처: 백준 단계별로 풀어보기 기본수학 1편

www.acmicpc.net/problem/10757

[

10757번: 큰 수 A+B

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

www.acmicpc.net

](https://www.acmicpc.net/problem/10757)

long으로 풀면 되는게 아니라, 문자열에 저장해서 풀어야 하는 문제다. (배열로도 가능)

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        String ans = "";    // a+b를 담을 변수

        int idxA = a.length() - 1;
        int idxB = b.length() -1;

        int sum = 0;
        int plus = 0;

        while(true) {
            if(idxA <0 && idxB<0) {
                if(plus !=0) ans+= plus;
                break;
            }
            else if(idxA<0 && idxB>=0) {
                sum = plus + stoi(b.charAt(idxB--));
            }
            else if(idxA>=0 && idxB<0) {
                sum = plus + stoi(a.charAt(idxA--));
            }else {
                sum = plus + stoi(a.charAt(idxA--)) + stoi(b.charAt(idxB--));
            }

            ans += String.valueOf(sum%10);
            plus = sum / 10;
        }

        System.out.println(reverse(ans));


    }


    public static int stoi(char a) {
        return a - '0';
    }

    public static String reverse(String a) {
        int len = a.length();
        String ans = "";

        for (int i = len - 1; i >= 0; i--) {
            ans += String.valueOf(a.charAt(i));
        }

        return ans;
    }
}

입력받은 두 수의 자리수가 달라서 저렇게 조건을 나누었지만, 다른 사람 코드를 봐보니 애초에 두 문자열이 길이가 동일하도록 변경해주는 방법이 있었다.
예를 들어, 100 + 4 를 100+ 004 로 맞춰주는 것이다.

이 풀이 외에는 java.math.BigDecimal을 이용해서 그냥 add 해주었다. 이건 아는 사람만 할 수 있는 듯..

728x90
Comments