Skip to content

Commit ec22bdf

Browse files
committed
DP / 개념 다지기
1 parent 3efa186 commit ec22bdf

2 files changed

Lines changed: 89 additions & 0 deletions

File tree

1010번: 다리 놓기/Main.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
/* ************************************************************************** */
3+
/* */
4+
/* ::: ::: ::: */
5+
/* Problem Number: 1010 :+: :+: :+: */
6+
/* +:+ +:+ +:+ */
7+
/* By: thxogh1 <boj.kr/u/thxogh1> +#+ +#+ +#+ */
8+
/* +#+ +#+ +#+ */
9+
/* https://boj.kr/1010 #+# #+# #+# */
10+
/* Solved: 2025/04/04 14:33:59 by thxogh1 ### ### ##.kr */
11+
/* */
12+
/* ************************************************************************** */
13+
import java.io.BufferedReader;
14+
import java.io.InputStreamReader;
15+
import java.util.StringTokenizer;
16+
17+
public class Main {
18+
static int ans = 0;
19+
20+
public static void main(String[] args) throws Exception {
21+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
22+
StringTokenizer st;
23+
int tcase = Integer.parseInt(br.readLine());
24+
while (tcase-- > 0) {
25+
st = new StringTokenizer(br.readLine());
26+
int n = Integer.parseInt(st.nextToken());
27+
int m = Integer.parseInt(st.nextToken());
28+
int[][] dp = new int[m + 1][n + 1];
29+
30+
for (int i = 0; i <= m; i++) {
31+
dp[i][0] = 1;
32+
}
33+
34+
for (int i = 1; i <= m; i++) {
35+
for (int j = 1; j <= Math.min(i, n); j++) {
36+
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
37+
}
38+
}
39+
// for (int i = 1; i <= n; i++) {
40+
// for (int j = 1; j <= m; j++) {
41+
// System.out.print(dp[i][j] + " ");
42+
// }
43+
// System.out.println();
44+
// }
45+
System.out.println(dp[m][n]);
46+
}
47+
}
48+
49+
}
50+
51+
// nCm = (n - 1) C (m - 1) + (n - 1) C m

1010번: 다리 놓기/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# 1010번: 다리 놓기 - <img src="https://static.solved.ac/tier_small/6.svg" style="height:20px" /> Silver V
2+
3+
<!-- performance -->
4+
5+
<!-- 문제 제출 후 깃허브에 푸시를 했을 때 제출한 코드의 성능이 입력될 공간입니다.-->
6+
7+
<!-- end -->
8+
9+
## 문제
10+
11+
[문제 링크](https://boj.kr/1010)
12+
13+
14+
<p>재원이는 한 도시의 시장이 되었다. 이 도시에는&nbsp;도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다.&nbsp;하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M)</p>
15+
16+
<p>재원이는 서쪽의 사이트와 동쪽의 사이트를 다리로 연결하려고 한다. (이때 한 사이트에는 최대 한 개의 다리만 연결될 수 있다.) 재원이는 다리를 최대한 많이 지으려고 하기 때문에 서쪽의 사이트 개수만큼 (N개) 다리를 지으려고 한다. 다리끼리는 서로 겹쳐질 수 없다고 할 때 다리를 지을 수 있는 경우의 수를 구하는 프로그램을 작성하라.</p>
17+
18+
<p><img alt="" src="https://www.acmicpc.net/upload/201003/pic1.JPG" style="height:353px; width:329px"></p>
19+
20+
21+
22+
## 입력
23+
24+
25+
<p>입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 &lt; N ≤ M &lt; 30)이 주어진다.</p>
26+
27+
28+
29+
## 출력
30+
31+
32+
<p>각 테스트 케이스에 대해 주어진 조건하에 다리를 지을 수 있는 경우의 수를 출력한다.</p>
33+
34+
35+
36+
## 소스코드
37+
38+
[소스코드 보기](Main.java)

0 commit comments

Comments
 (0)