From 851bef2b95b7d4cf577fd1fdc9795c980aff12ac Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Wed, 5 Mar 2025 12:46:43 +0900 Subject: [PATCH] =?UTF-8?q?[Platinum=20V]=20Title:=20=EA=B3=A0=EC=B8=B5=20?= =?UTF-8?q?=EB=B9=8C=EB=94=A9,=20Time:=20504=20ms,=20Memory:=2046208=20KB?= =?UTF-8?q?=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Platinum/1328. 고층 빌딩/README.md | 34 ++++++++++++++++++++++ 백준/Platinum/1328. 고층 빌딩/고층 빌딩.py | 14 +++++++++ 2 files changed, 48 insertions(+) create mode 100644 백준/Platinum/1328. 고층 빌딩/README.md create mode 100644 백준/Platinum/1328. 고층 빌딩/고층 빌딩.py diff --git a/백준/Platinum/1328. 고층 빌딩/README.md b/백준/Platinum/1328. 고층 빌딩/README.md new file mode 100644 index 0000000..5c1dc48 --- /dev/null +++ b/백준/Platinum/1328. 고층 빌딩/README.md @@ -0,0 +1,34 @@ +# [Platinum V] 고층 빌딩 - 1328 + +[문제 링크](https://www.acmicpc.net/problem/1328) + +### 성능 요약 + +메모리: 46208 KB, 시간: 504 ms + +### 분류 + +조합론, 다이나믹 프로그래밍, 수학 + +### 제출 일자 + +2025년 3월 5일 12:46:24 + +### 문제 설명 + +
상근이가 살고있는 동네에는 빌딩 N개가 한 줄로 세워져 있다. 모든 빌딩의 높이는 1보다 크거나 같고, N보다 작거나 같으며, 같은 높이를 가지는 빌딩은 없다. 상근이는 학교 가는 길에 가장 왼쪽에 서서 빌딩을 몇 개 볼 수 있는지 보았고, 집에 돌아오는 길에는 가장 오른쪽에 서서 빌딩을 몇 개 볼 수 있는지 보았다.
+ +상근이는 가장 왼쪽과 오른쪽에서만 빌딩을 봤기 때문에, 빌딩이 어떤 순서로 위치해있는지는 알 수가 없다.
+ +빌딩의 개수 N과 가장 왼쪽에서 봤을 때 보이는 빌딩의 수 L, 가장 오른쪽에서 봤을 때 보이는 빌딩의 수 R이 주어졌을 때, 가능한 빌딩 순서의 경우의 수를 구하는 프로그램을 작성하시오.
+ +예를 들어, N = 5, L = 3, R = 2인 경우에 가능한 빌딩의 배치 중 하나는 1 3 5 2 4이다.
+ +### 입력 + +첫째 줄에 빌딩의 개수 N과 가장 왼쪽에서 봤을 때 보이는 빌딩의 수 L, 가장 오른쪽에서 봤을 때 보이는 빌딩의 수 R이 주어진다.
+ +### 출력 + +첫째 줄에 가능한 빌딩 순서의 경우의 수를 1000000007로 나눈 나머지를 출력한다.
+ diff --git a/백준/Platinum/1328. 고층 빌딩/고층 빌딩.py b/백준/Platinum/1328. 고층 빌딩/고층 빌딩.py new file mode 100644 index 0000000..4cfea06 --- /dev/null +++ b/백준/Platinum/1328. 고층 빌딩/고층 빌딩.py @@ -0,0 +1,14 @@ +import sys +input = sys.stdin.readline + +N, L, R = map(int, input().split()) + +D = [[[0 for i in range(101)] for j in range(101)] for k in range(101)] +D[1][1][1] = 1 + +for i in range(2, N+1): + for j in range(1, L+1): + for k in range(1, R+1): + D[i][j][k] = (D[i-1][j-1][k] + D[i-1][j][k-1] + (D[i-1][j][k] * (i-2)))%1000000007 + +print(D[N][L][R]) \ No newline at end of file