[알고리즘] 1010. 다리 놓기
2024. 3. 2. 16:17ㆍAlgorithm/with Java
0. 문제
1. 문제 이해
- 조합
- DP
2. 제출
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// DP - 조합
public class BOJ1010 {
static int N, M;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuffer sb = new StringBuffer();
int T = Integer.parseInt(st.nextToken());
for(int tc=1; tc<=T; tc++) {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
sb.append(solve()).append("\n");
}
System.out.println(sb);
br.close();
}
// DP로 mCr을 구한다.
static int solve() {
int[][] dp = new int[M+1][N+1]; // 파스칼의 삼각형로 mCn 구하기
for(int i=0; i<=M; i++) {
for(int j=0, end=Math.min(i, N); j<=end; j++) {
if(j==0 || j==i) dp[i][j] = 1;
else dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}
}
return dp[M][N];
}
}
시간 제한 0.5초라서 팩토리얼 계산을 피해야 한다.
파스칼의 삼각형을 활용하여 DP로 조합의 수를 구한다.
'Algorithm > with Java' 카테고리의 다른 글
[알고리즘] 14502. 연구소 (0) | 2024.03.02 |
---|---|
[알고리즘] 1767. 프로세서 연결하기 (0) | 2024.03.02 |
[알고리즘] 1463. 1로 만들기 (0) | 2024.03.02 |
[알고리즘] 4485. 녹색 옷 입은 애가 젤다지? (0) | 2024.03.02 |
[알고리즘] 1753. 최단경로 (0) | 2024.03.02 |