| 시간제한 | 메모리제한 | 
|---|---|
| 2초 | 128MB | 
갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.
그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.
프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
한 생명체에게 얼마씩 돈을 줄 수 있는가?
또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?
첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수)
첫 번째 줄에 생명체 하나에게 돌아가는 돈의 양을 출력한다.
두 번째 줄에는 1원씩 분배할 수 없는 남는 돈을 출력한다.
문제 자체는 굉장히 간단한 문제다. 첫째줄은 하나에게 돌아가는 돈이므로 나눗셈, 둘째줄은 나눈 나머지를 출력하면 된다. 따라서 풀이따라 코드를 작성해봤다.
백준은 입력값을 표준 입력으로 제시해준다.(찾느라 오래걸림)
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        if(n > m){
            System.out.println(n/m);
            System.out.println(n%m);
        }
    }
}
당당하게 제출했지만 InputMismatchException
int범위를 넘어선 값이 들어와서 나온 예외라 Long으로 바꿔줬다.
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        Long n = scanner.nextLong();
        Long m = scanner.nextLong();
        if(n > m){
            System.out.println(n/m);
            System.out.println(n%m);
        }
    }
}
또 InputMismatchException가 떴다.
왜 InputMismatchException???
| int | long | 
|---|---|
| –2,147,483,648 ~ 2,147,483,647 | -9223372036854775808 ~ 9223372036854775807 | 
두 자료형 범위인데 초과했다. 따라서 다른 대안이 필요하다.
찾아보니 Long를 벗어나는 수는 BigInteger를 쓰면 된다고 한다.
Immutable arbitrary-precision integers.
첫 줄에 불변의 임의 정밀도 정수라고 나오는데 무한대 정수 계산할 때 쓴다. BigInteger타입은 연산자가 아닌 전용 메소드를 통해 계산해야한다.
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        
        BigInteger n = scanner.nextBigInteger();
        BigInteger m = scanner.nextBigInteger();
        
        if(n.compareTo(m) != -1){ //같으면 0, n이 크면 1, n이 작으면 -1
            System.out.println(n.divide(m));	//나누기
            System.out.println(n.remainder(m)); //나머지
        }
    }
}
이렇게 풀이한 결과

맞췄다.

import java.util.*
fun main(){
    val scan = Scanner(System.`in`)
    val n = scan.nextBigInteger()
    val m = scan.nextBigInteger()
    if(n.compareTo(m) != -1){
        println(n.divide(m))
        println(n.remainder(m))
    }
}