https://www.acmicpc.net/problem/1271
문제
> 갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.
> 그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.
> 프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
> 한 생명체에게 얼마씩 돈을 줄 수 있는가?
> 또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?
접근
가능한 n과 M의 최대 범위가 10의 1000승까지이므로 약 10의 9승, 약 10의 18승 정도밖에 담지 못하는 정수형변수로는 할 수 없다. 그래서 큰 수를 다룰 수 있는 BigInteger를 사용한다.
BigInteger는 문자열형으로 이루어진 숫자를 다루는 자료형이다. 대신 모두 정수로 이루어져있어야한다.
문제해결
> StringTokenizer를 사용하여 두 수 N과 M을 BigInteger변수로 입력받는다.
> 각각 N을 M으로 나눈 몫과 나머지를 출력할건데 BigInteger 자체의 사칙연산을 사용하여 계산해아한다.
> N.divide(M)을 통해 N을 M으로 나눈 몫을 출력하고
> M.remainder(M)을 통해 N을 M으로 나눈 나머지를 출력한다.
코드
import java.io.*;
import java.math.BigInteger;
import java.util.*;
import java.lang.*;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
BigInteger N = new BigInteger(st.nextToken());
BigInteger M = new BigInteger(st.nextToken());
System.out.println(N.divide(M));
System.out.println(N.remainder(M));
}
}

후기
범위가 말이안돼는 범위인데 정수라고 주어져서 뭔가 했다. 보통 이런경우엔 문자열로 다뤄서 변환하고 처리하는데 자바엔 BigInteger라는게 있다는걸 알게됐다. 한문장으로 딸깍해서 너무 편하고 좋다.