알고리즘 문제 풀이/Java

[Java] Bronze V - 1271. 엄청난 부자2 (Baekjoon)

갓것걋 2024. 6. 27. 09:00
 

1271. 엄청난 부자2

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

http://www.acmicpc.net

문제 설명

더보기

엄청난 부자2

 

문제

갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.

그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.

프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.

한 생명체에게 얼마씩 돈을 줄 수 있는가?

또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?

 

입력

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

 

출력

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

 

예제 입력 1

1000 100

 

예제 출력 1

10
0

문제 해설

Java 코드

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

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

        // 입력 조건에 m과 n의 최댓값이 10의 1,000 제곱
        // int로는 부족함

        // int와 BigInteger의 차이점
        // int의 범위는 '-2,147,483,648~2,147,483,647'이지만
        // BigInteger의 범위는 문자열 형태로 이루어져 있어 무한임

        BigInteger n = sc.nextBigInteger();
        BigInteger m = sc.nextBigInteger();
        sc.close();

        // BigInteger 계산법
        // 문자열 형태로 이루어져 있기에 사칙연산이 안됨
        // 따라서 BigInteger의 값을 계산을 하려면 클래스 내부의 함수를 이용해야 함
        System.out.println(n.divide(m)); // 나누기
        System.out.println(n.remainder(m)); // 나머지
    }
}

 

Java 코드 해

  1. Scanner를 사용해 입력을 받고, 문제의 입력 범위가 10의 1000승까지이기 때문에 Long으로도 불가능함.
  2. 그래서 입력을 받은 값을 "문자열" 형태로 바꾸기 위해서 BigInteger라는 클래스를 사용함.
  3. 아무튼 BigInteger의 형태로 입력을 받은 다음 n과 m에 할당함.
  4. 첫 째줄에 n과 m의 값을 나눈 값을, 둘 째줄에 n을 m로 나눈 나머지 값을 출력함.