반응형
백준 Baekjoon 1010번 다리 놓기 - JAVA
문제 풀이
입력 받은 N과 M으로 M C(combination) N 조합을 구하는 문제이다. 여러 테스트 케이스가 존재하여 미리 30 x 30 배열에 값을 구해 저장해둔다. 조합은 앞서 구한 이전 조합을 통해 다음 조합을 구하면 시간 복잡도를 줄일 수 있는 다이나믹 프로그래밍 방식이다.
nC0 = nCn = 1
nCr = n-1Cr-1 + n-1Cr
이 두가지 공식을 활용하면 쉽게 풀 수 있다.
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int[][] dp = new int[30][30];
for (int i = 0; i < 30; i++) {
dp[i][0] = dp[i][i] = 1;
}
for (int i = 2; i < 30; i++) {
for (int j = 1; j < 30; j++) {
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
}
}
StringBuilder sb = new StringBuilder();
while (T-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
sb.append(dp[M][N]).append("\n");
}
System.out.println(sb);
}
}
반응형
'알고리즘(Algorithm) > 백준(Baekjoon)' 카테고리의 다른 글
[백준 Baekjoon] 16236번 아기 상어 - JAVA (0) | 2021.11.23 |
---|---|
[백준 Baekjoon] 1700번 멀티탭 스케줄링 - JAVA (0) | 2021.11.22 |
[백준 Baekjoon] 14003번 가장 긴 증가하는 부분 수열 5 - JAVA (0) | 2021.11.21 |
[백준 Baekjoon] 6087번 레이저 통신 - JAVA (0) | 2021.11.20 |
[백준 Baekjoon] 2851번 슈퍼마리오 - JAVA (0) | 2021.11.20 |