import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
long[] resultArr = new long[T];
for(int i = 0; i < T; i++) {
int N = scanner.nextInt();
int M = scanner.nextInt();
long result = calculate(N, M);
resultArr[i] = result;
}
for(int i = 0; i < T; i++) {
System.out.println(resultArr[i]);
}
scanner.close();
}
private static long calculate(int N, int M) {
long result = 1;
for (long i = M; i > M - N; i--)
result *= i;
for (long i = 2; i <= N; i++)
result /= i;
return result;
}
}
다음과 같이 코드를 작성하니 오버플로우가 발생했다.
입력 처리 부분을 Scanner가 아닌 BufferedReader로 변경했다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(bufferedReader.readLine());
long[] resultArr = new long[T];
for (int i = 0; i < T; i++) {
String[] tokens = bufferedReader.readLine().split(" ");
int N = Integer.parseInt(tokens[0]);
int M = Integer.parseInt(tokens[1]);
long result = calculate(N, M);
resultArr[i] = result;
}
for (int i = 0; i < T; i++) {
System.out.println(resultArr[i]);
}
bufferedReader.close();
}
private static long calculate(int N, int M) {
long result = 1;
for (long i = M, j = 1; j <= N; i--, j++) {
result *= i;
result /= j;
}
return result;
}
}
result 계산 부분도 하나의 for문으로 합칠 수 있었다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준_JAVA_알고리즘] 7785 회사에 있는 사람 (1) | 2024.02.11 |
---|---|
[백준_JAVA_알고리즘] 10815 숫자 카드 (0) | 2024.02.10 |
[백준_JAVA_알고리즘] 10814 나이순 정렬 (1) | 2024.02.09 |
[백준_JAVA_알고리즘] 1181 단어 정렬 (0) | 2024.02.08 |
[백준_JAVA_알고리즘] 11651 좌표 정렬하기 2 (0) | 2024.02.07 |