문제
https://www.acmicpc.net/problem/11051
풀이(20분)
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));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
long[][] dp = new long[1001][1001];
int MOD = 10007;
dp[0][0] = 1;
for (int i = 1; i <= n; i++) {
dp[i][0] = 1;
dp[i][i] = 1;
for (int j = 1; j < i; j++) {
dp[i][j] = (dp[i - 1][j] + dp[i - 1][j - 1]) % MOD;
}
}
System.out.println(dp[n][k]);
}
}
초반 수학적 개념만 사용하여 직접 팩토리얼을 계산하려고 하였으나 이는 문제 해결에 있어 너무 많은 계산을 요구했다.
따라서 파스칼 삼각형을 이용한 dp 배열을 사용하여 문제를 해결하였다.
코드 자체에 대한 이해보다는 파스칼 삼각형에 대한 이해만 있으면 충분히 문제를 이해할 수 있을 것이다.
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 2193번. 이친수(JAVA) (0) | 2024.12.10 |
---|---|
[백준] 1717번. 집합의 표현(JAVA) (0) | 2024.12.04 |
[백준] 11722번. 가장 긴 감소하는 부분 수열(JAVA) (0) | 2024.12.03 |
[백준] 1699번. 제곱수의 합(JAVA) (0) | 2024.12.03 |
[백준] 9202번. 골드바흐의 추측(JAVA) (1) | 2024.12.03 |