728x90
백준 1328 고층 빌딩
문제
상근이가 살고있는 동네에는 빌딩 N개가 한 줄로 세워져 있다. 모든 빌딩의 높이는 1보다 크거나 같고, N보다 작거나 같으며, 같은 높이를 가지는 빌딩은 없다. 상근이는 학교 가는 길에 가장 왼쪽에 서서 빌딩을 몇 개 볼 수 있는지 보았고, 집에 돌아오는 길에는 가장 오른쪽에 서서 빌딩을 몇 개 볼 수 있는지 보았다.
상근이는 가장 왼쪽과 오른쪽에서만 빌딩을 봤기 때문에, 빌딩이 어떤 순서로 위치해있는지는 알 수가 없다.
빌딩의 개수 N과 가장 왼쪽에서 봤을 때 보이는 빌딩의 수 L, 가장 오른쪽에서 봤을 때 보이는 빌딩의 수 R이 주어졌을 때, 가능한 빌딩 순서의 경우의 수를 구하는 프로그램을 작성하시오.
예를 들어, N = 5, L = 3, R = 2인 경우에 가능한 빌딩의 배치 중 하나는 1 3 5 2 4이다.
입력
첫째 줄에 빌딩의 개수 N과 가장 왼쪽에서 봤을 때 보이는 빌딩의 수 L, 가장 오른쪽에서 봤을 때 보이는 빌딩의 수 R이 주어진다.
출력
첫째 줄에 가능한 빌딩 순서의 경우의 수를 1000000007로 나눈 나머지를 출력한다.
제출
import java.util.Scanner;
public class B1_1328 {
static long mod = 1000000007;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int L = sc.nextInt();
int R = sc.nextInt();
long D[][][] = new long[101][101][101];
D[1][1][1] = 1;
for (int i = 2; i <= N; i++) {
for (int j = 1; j <= L; j++) {
for (int k = 1; k <= R; k++) {
D[i][j][k] = (D[i - 1][j][k] * (i - 2) +( D[i - 1][j][k - 1] + D[i - 1][j - 1][k])) % mod;
}
}
}
System.out.println(D[N][L][R]);
}
}
예제
3 2 2
3 2 1
5 3 2
12 1 1
8 3 2
결과
728x90
'JAVA > 백준' 카테고리의 다른 글
[Java] 백준 11049 행렬 곱셈 순서 - 동적 계획법(12) (1) | 2023.01.19 |
---|---|
[Java] 백준 2342 Dance Dance Revolution - 동적 계획법(11) (0) | 2023.01.18 |
[Java] 백준 1915 가장 큰 정사각형 - 동적 계획법(9) (0) | 2023.01.16 |
[Java] 백준 9252 LCS 2 - 동적 계획법(8) (1) | 2023.01.15 |
[Java] 백준 13398 연속합 2 - 동적 계획법(7) (1) | 2023.01.14 |
댓글