Algorithm/백준

[백준 알고리즘] 2338번: 긴자리 계산 (JAVA)

에릭 Kim 2024. 1. 25. 22:54
반응형

https://www.acmicpc.net/problem/2338

 

2338번: 긴자리 계산

첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A×B를 출력한다. 각각을 출력할 때, 답이 0인 경우를 제외하고는 0으로 시작하게 해서는 안 된다(1을 01로 출력하면 안 된다는 의미).

www.acmicpc.net

 

소스코드

import java.io.*;
import java.math.BigInteger;

class P2338 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        // int 형, long 형보다 큰 수가 들어올 수 있는 경우 => BigInteger 
        BigInteger a = new BigInteger(br.readLine());
        BigInteger b = new BigInteger(br.readLine());

        sb.append(a.add(b)).append("\n")
          .append(a.subtract(b)).append("\n")
          .append(a.multiply(b));
        System.out.println(sb);
    }
}

 

풀이

★ 브론즈 5문제인데 정답률이 50프로길래 뭔가 있겠구나 싶었습니다 ! 그래서 변수의 타입을 int형이 아닌 long형으로 지정해줬습니다. 그 이유는 웬만하면 long형의 데이터 표현 범위 안에 들어오기 때문입니다 ! 

https://tcpschool.com/java/java_datatype_basic

 

★ 하지만 long 타입으로도 런타임 에러가 떴고, 다른 방식이 있나 구글링을 해보니 BigInteger라는 클래스를 활용하면 값의 무한대를 표현할 수 있다고 합니다.

 

★ BigInteger 클래스의 특이점은 문자열을 인자값으로 넘겨줘야 합니다. 또한 문자열이기 때문에 사칙연산이 되지 않습니다 ! 그래서 클래스에서 지원하는 add, subtract, multiply와 같은 메서드로 결과값을 구해줬습니다 :) 

 

 

 

 

 

 

자세한 설명은 다음 블로그를 참고하시면 좋을 거 같습니다.

https://coding-factory.tistory.com/604

 

[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 & 예제 총정리

BigInteger를 사용해야 하는 이유 Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long

coding-factory.tistory.com

 

반응형