문제 설명
갑부 최백준 조교는 동전을 최소로 바꾸는 데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.
그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.
프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
한 생명체에게 얼마씩 돈을 줄 수 있는가?
또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?
입출력
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???
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)); //나머지
}
}
}
이렇게 풀이한 결과
맞췄다.
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))
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
1145번 / 적어도 대부분의 배수 (0) | 2022.06.13 |
---|---|
1032번 / 명령프롬포트 (0) | 2022.06.13 |
2475번 / 검증수 (0) | 2022.06.13 |
2338번 / 긴자리계산 (0) | 2022.06.13 |
1550번 / 16진수 (0) | 2022.06.13 |