Algorithm

[Java] 백준 2338번 긴자리 계산

로춘남 2021. 10. 27. 20:27
728x90


입력값을 통해 사칙연산을 출력하는 문제. 범위가 10^1000 이기때문에 int 가 아닌 BigInteger를 활용하여 풀어준다.

 

워밍업 Scanner로 해보기

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        BigInteger A = sc.nextBigInteger();
        BigInteger B = sc.nextBigInteger();

        System.out.println(A.add(B));
        System.out.println(A.subtract(B));
        System.out.println(A.multiply(B));

    }
}

Int로 설정하던것을 BigInteger로 선언해주면 되는거라 크게 어렵지 않다. 다만, Int와 다르게 System.out.println(A+B)처럼 A-B나 A*B가 BigInteger에서는 안되기때문에 함수로 계산을 해줘야한다.

두 수의 합은 add() / 두 수의 뺄셈은 subtract() / 두 수의 곱셈은 multiply()를 통해 해결 해줄 수 있다.

 

워밍업 끝!

 

알고리즘 입출력의 대마왕  Buffer로 다시 해보기!

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

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

        System.out.println(A.add(B));
        System.out.println(A.subtract(B));
        System.out.println(A.multiply(B));
    }
}

Scanner 자리에 BufferedReader로 선언. BigInteger를 활용하여 덧셈, 뺄셈, 곱셈 함수로 입출력 값을 계산해준다.

 

Buffer로 해결도 끝! 이제 Scanner와 Buffer의 차이를 실감해보자

Scanner를 이용했을때

메모리 : 17996KB / 시간 : 228ms

 

Buffer를 이용했을때

메모리 : 14568KB / 시간: 136ms

 

Wow!

728x90

'Algorithm' 카테고리의 다른 글

[Java] 백준 1008번 : A/B  (0) 2021.10.28
[백준] 1001번 : A-B  (0) 2021.10.28
[Java] 백준 1550번 16진수  (0) 2021.10.27
[Java] 백준 1271번 엄청난 부자2  (0) 2021.10.25
[Java] 백준 1330번 두 수 비교하기  (0) 2021.10.22