코테/코드트리
[코드트리/INTERMEDIATE LOW] 서로 다른 BST 개수 세기 (JAVA)
imname1am
2024. 1. 16. 12:47
반응형
📖 문제
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
💡 풀이 방식
• DP (Tabulation)
. BST(1), BST(2)부터 시작해 BST(n) 구하기
- 서로 다른 BST 개수
= (왼쪽에 들어갈 수로 만들 수 있는 서로 다른 BST 개수) * (오른쪽에 들어갈 수로 만들 수 있는 서로 다른 BST 개수)
→ (왼쪽, 오른쪽 쌍) = (0, n-1), (1, n -2), (2, n-3), ...
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[N + 1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2 ; i <= N ; i++) {
int sum = 0;
for(int j = 0 ; j < i ; j++) {
sum += dp[j] * dp[i - j - 1]; // 왼쪽 BST 경우의 수 * 오른쪽 BST 경우의 수
}
dp[i] = sum;
}
System.out.println(dp[N]);
}
}
|
cs |
💦 어려웠던 점
오.. 혼자 절대 이 식을 생각해내지 못 했을 것 같다,,
담엔 BST 스스로 셀 수 있길,,,
🧐 새로 알게 된 내용
DP로 BST 만드는 식
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 코드트리
반응형