1271번 : 엄청난 부자

상환·2021년 11월 30일
0
post-thumbnail
시간제한메모리제한
2초128MB

문제설명

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

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

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

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

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

입출력

1. 입력

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

2. 출력

첫 번째 줄에 생명체 하나에게 돌아가는 돈의 양을 출력한다.
두 번째 줄에는 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???

intlong
–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)); //나머지
        }
    }
}

이렇게 풀이한 결과

맞췄다.

kotlin Code

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))
    }
}
profile
레모네이드 커피

0개의 댓글