백준 10757번 - 큰 수 A+B

이동준·2022년 2월 25일
0

최대 10000자리 까지의 큰 숫자 2개를 더하는 문제이다

🎯 Logic

  1. BigInteger 클래스에서 객체의 생성과 메소드 활용

첫 번째 풀이

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

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

        BigInteger bigA=new BigInteger(A);
        BigInteger bigB=new BigInteger(B);
        System.out.println(bigA.add(bigB));


    }

}

🎯 Logic

  1. 길이가 짧은 쪽 앞에 0을 추가해주어서 길이를 맞추기
  2. 각 자리 숫자를 더하고 나머지를 출력 몫은 다음번 계산으로 넘겨주기 (마지막 몫이 0이 아니면 추가해주기)

두 번째 풀이

// StringBuilder 의 reverse() 함수 이용하면 쉽게 거꾸로 뒤집을 수 있다
// char -> int 형 변환
//      1. 문자 - 'a' or 'A'
//      2. 숫자 - '0'
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static String stringA,stringB;
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=new StringTokenizer(br.readLine());
        StringBuilder sb=new StringBuilder();
        StringBuilder out=new StringBuilder();
        stringA=st.nextToken();
        stringB=st.nextToken();

        // BigInteger 쓰지 않고 풀이하는 법
        int lenA=stringA.length();
        int lenB=stringB.length();

        // 길이가 짧은 쪽에 "0" 을 차이만큼 더해주기
        if(lenA>=lenB){
            for(int i=0; i<lenA-lenB; i++){
                sb.append("0");
            }
            stringB=sb.toString()+stringB;

        }else{
            for(int i=0; i<lenB-lenA; i++){
                sb.append("0");
            }
            stringA=sb.toString()+stringA;
        }

        // 더하는 알고리즘
        lenA=stringA.length();
        int q=0;
        for(int i=lenA-1; i>=0; i--){
            int subSum=q+(stringA.charAt(i)-'0')+(stringB.charAt(i)-'0');
            int r=subSum%10;
            q=subSum/10;
            out.append(r);
        }

        // 마지막에 몫이 있으면 추가해주기
        if(q==0) {
            System.out.println(out.reverse());
        }
        else{
            out.append(q);
            System.out.println(out.reverse());
        }

    }
}

두 번째 풀이 결과
자바 풀이 전체 중 7등으로 시간면에서 성능을 꽤 높였다

profile
PS 블로그/Java 풀이 + 코딩테스트 정리

1개의 댓글

comment-user-thumbnail
2024년 5월 2일

The power-ups in Subway Surfers are so fun to use. They really add an extra layer of excitement to the game!

답글 달기