정말정말 간단한 로직의 문제인데도 이유모를 런타임에러로 엄청 헤멨던 문제,,,ㅠㅠ
내가 헤멨던 과정을 적어보고자 한다.
1. 첫번째 시도 >> scanner만 사용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int money = scanner.nextInt();
int life = scanner.nextInt();
System.out.println(money/life);
System.out.println(money%life);
}
}
너무 쉽다고 생각하고 scanner로 작성했는데 어림도없이 런타임오류가 떴다.
여기까지는 scanner의 속도문제라고 생각하고 다른시도를 해봤다.
2. 두번째 시도 >> BufferedReader사용
import java.io.*;
import java.util.*;
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());
int money = Integer.parseInt(st.nextToken());
int life = Integer.parseInt(st.nextToken());
System.out.println(money/life);
System.out.println(money%life);
}
}
scanner보다 속도가 훨씬 빠른 BufferedReader를 사용해서 작성해보았다.
이 문제같은 경우에 한줄에 여러개의 입력을 받아야 하는데,
scanner에서는 이 과정이 간단하지만 BufferedReader에서는 StringTokenizer 객체를 새로 생성해서 사용해주어야한다.
여기까지 하고 이제 될거라고 뿌듯해했는데 또 런타임 오류가 떴다.....
3. 정답 >> 자바 BigInteger클래스 사용
import java.math.BigInteger;
import java.util.*;
public class Test {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
BigInteger money = scanner.nextBigInteger();
BigInteger life = scanner.nextBigInteger();
System.out.println(money.divide(life));
System.out.println(money.remainder(life));
}
}
난 long보다 더 큰 정수의 단위..? 그런게 있는줄도 몰랐다.. 근데 BigInteger라는 자바의 클래스가 있었다..
BigInteger는 문자열형태여서 어떤수든지 담을 수 있다. (무한대의 수를 담을 수 있음)
이 클래스에서 주의해야 할 점은, 수의 연산에 있어서도 +-/%등의 기본 연산부호가 아닌
클래스내의 별도 메소드를 사용해줘야 한다는 점이다.
Number1.add(Number2) //더하기
Number1.subtract(Number2) //빼기
Number1.multiply(Number2) //곱하기
Number1.divide(Number2) //나누기
Number1.remainder(Number2) //나머지
넘 이상한거에서 헷갈리게 하는 느낌이다 ㅠ 흑
그래도 BufferedReader로 한줄에 여러개 입력받는 방법을 새로알게되어서 뿌듯하당!
'알고리즘' 카테고리의 다른 글
16진수 10진수로 변환하기 (백준 1550번, 진수 내장함수 쓰지않고) (0) | 2022.02.22 |
---|---|
알고리즘 여러가지 (0) | 2022.02.07 |