본문 바로가기
JAVA/Coding Test Study

[Bronze V] 백준 - 엄청난 부자2 : Java

by ♡˖GYURI˖♡ 2023. 12. 19.
728x90
 

1271번: 엄청난 부자2

첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수)

www.acmicpc.net

 

 

 

문제 :

갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다. 그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다. 프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다. 한 생명체에게 얼마씩 돈을 줄 수 있는가? 또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?

 

입력 : 첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 10¹⁰⁰⁰, m과 n은 10진수 정수) 

 

출력 : 첫째 줄에 생명체 하나에게 돌아가는 돈의 양을 출력한다. 그리고 두 번째 줄에는 1원씩 분배할 수 없는 남는 돈을 출력한다.

 

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

public class no_1271 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigInteger money = sc.nextBigInteger();
        BigInteger number = sc.nextBigInteger();
        sc.close();
        System.out.println(money.divide(number));
        System.out.println(money.remainder(number));
    }
}

 

 

처음엔 이 문제를 int로 접근했는데, 오류가 나서 다시 보니 입력 조건에 m과 n의 최댓값이 10의 1000제곱이었다.

int의 메모리 범위는 -2,147,483,648 ~ 2,147,483,647 이다.

 

10의 1000제곱이면 무한에 가까운 큰 수이다. (10의 10제곱만 해도 10,000,000,000이다.)

 

그래서 int가 아닌 BigInteger를 사용해야 하는 것이다.

 

 

BigInteger

: BigInteger는 문자열 형태이기에 범위가 무한이다.

 

 

BigInteger 클래스 내부 함수

  • 더하기 : add()
  • 빼기 : subtract()
  • 곱하기 : multiply()
  • 나누기 : divide()