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

문제

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

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

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

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

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

입력

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

출력

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

예제

image

1) 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.math.BigInteger;
import java.util.Scanner;

public class Baekjoon1271 {
	
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		BigInteger n = new BigInteger(scan.next());
		BigInteger m = new BigInteger(scan.next());
		
		System.out.println(n.divide(m));
		System.out.println(n.remainder(m));
		
		scan.close();
	}

}

2) 풀이과정 및 공부한 내용

1. 문제 상황

  • 런타임 에러 (InputMismatch)
  • n과 m을 int로 받았기 때문에 생긴 에러

2. 해결 과정

  1. 문제 조건인 (1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수) 에서 101000은 정수형 중에서도 long의 범위를 한참 벗어나는 큰 수임.
    long이 수용할 수 있는 범위보다 큰 정수를 출력하기 위해 BigInteger 클래스 사용

    image

  2. BigInteger 클래스는 생성자로 String을 받음 ⇒ scan.next()
  3. BigInteger 클래스가 가지고 있는 연산 메서드 사용해서 몫과 나머지 출력