728x90
처음에 문제를 이해하는게 조금 어려웠다. 가지고 있는돈을 특정 금액으로 나눴을때, 얼마나 돈이 남는지를 보는거 같은데, 한국말을 너무 어렵게 쓴것 같다라는 느낌이...
단순하게 입력한 값을 특정 숫자로 나눴을때, 나머지를 묻는거 같아서 Scanner를 적용해보았다.
그런데 int로 접근을 해보니 오류가 나타났다. 입력조건의 범위가 10의 1000제곱인지라 int 의 범위를 넘는거 같았다. 그래서 int가 아닌 문자열 형태로 이루어진 숫자의 범위 BigInteger를 사용해보기로 했다. 나에게는 조금은 어색한 BigInteger. Int와 BigInteger의 차이를 찾아보았는데,
int의 경우 범위가 '-2,147,483,648 ~ 2,147,483,647'로 고정적으로 정해져있지만, BigInteger의 경우에는 문자열 형태로 이루어져 있어 그 범위는 무한이다. 또한 BigInteger의 경우 문자열로 이루어져 있기때문에 + 나 - 처럼 사칙연산이 적용되지가 않기 때문에 클래스 내부 함수를 이용해서 계산을 해야한다.
ex)
- 더하기: add()
- 빼기: subtract()
- 곱하기: multiply()
- 나누기: divide()
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger a = sc.nextBigInteger();
BigInteger b = sc.nextBigInteger();
sc.close();
System.out.println(a.divide(b));
System.out.println(a.remainder(b));
}
}
해당 식을 BigInteger를 이용했을때 작성해본 코드
Java에서 Scanner은 입출력 속도가 느리기로 악명 높아서 BueredReader도 사용해보았다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ1271 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str, " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a/b);
System.out.println(a%b);
}
}
BufferedReader와 조금 더 친숙해지기!
728x90
'Algorithm' 카테고리의 다른 글
[Java] 백준 2338번 긴자리 계산 (0) | 2021.10.27 |
---|---|
[Java] 백준 1550번 16진수 (0) | 2021.10.27 |
[Java] 백준 1330번 두 수 비교하기 (0) | 2021.10.22 |
[백준] 1000번: A+B (0) | 2021.10.02 |
[Java] 백준 10172번: 개 (0) | 2021.10.01 |