반응형
🔺 문제
2775번: 부녀회장이 될테야
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.util.*;
import java.io.*;
public class Main {
static int T, K, N;
static int[][] D;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
// DP 배열 초기화
D = new int[15][15];
for(int i = 0 ; i < 15 ; i++) {
D[i][1] = 1; // 1호실 값은 항상 1로 초기화
D[0][i] = i; // 0층 i호의 수는 i로 초기화
}
// DP 배열 채우기
for(int i = 1 ; i < 15 ; i++) {
for(int j = 2 ; j < 15 ; j++) {
D[i][j] = D[i][j - 1] + D[i - 1][j];
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < T ; i++) {
int K = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
sb.append(D[K][N] + "\n");
}
System.out.println(sb.toString());
br.close();
}
}
|
cs |
✅ 해결 아이디어
✔ DP → 점화식! (23번째 줄)
💥 유의사항
• D[ i ][ j ] = D[ i - 1 ] [ 0 ] + … + D[ i - 1 ] [ j - 1 ] + D[ i - 1 ][ j ] 가 원래 식인데
여기서 D[ i - 1 ] [ 0 ] + … +D[ i - 1 ] [ j - 1 ] = D[ i ] [ j - 1] 이므로
⇨ 최종 점화식 : D[ i ][ j ] = D[ i ][ j - 1 ] + D[ i - 1 ][ j ]
🔺 다른 풀이들
과정 설명이 굿..
[백준] 2775번 : 부녀회장이 될테야 - JAVA [자바]
https://www.acmicpc.net/problem/2775 2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1
st-lab.tistory.com
💬 느낀 점
점화식을 잘 세우는 사람이 되고 싶다!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 7/3 |
(+7/3 2회독)
점화식 쉽게 세웠다.... !!ㅠㅠ
한 번 풀어본 문제라고 안 쫄아서 그런가...ㅠㅠ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
int[][] dp = new int[15][15];
// dp 배열 초기화
for(int i = 0 ; i < 15 ; i++) {
dp[0][i] = i;
dp[i][1] = 1;
}
// dp 값 채우기
for(int i = 1 ; i < 15 ; i++) {
for(int j = 2 ; j < 15 ; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
while(T --> 0) {
int k = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
sb.append(dp[k][n]).append("\n");
}
System.out.println(sb);
}
}
|
cs |
반응형