hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie

hyelie

PS/PS Log

23.08.05. 풀었던 문제들 복기

Leetcode 95. Unique Binary Search Trees II

 unique한 binary tree를 어떻게 만들지 ? ... 라고 생각하면.

 

dp(start, end) = for all i in [start, end], dp[start, i-1] + dp[i+1, end]

 

로 풀면 된다.

 

 이게 무슨 말이냐?

 start ~ end 사이에 있는 어떤 i를 root로 두고, 그 start ~ i-1은 왼쪽 subtree에, i+1 ~ right는 오른쪽 subtree에 넣는 DP라는 말이다.

 

 그러면, left subtree와 right subtree의 cartesian product하면 모든 가능한 결과가 나온다.

 

// Runtime 16 ms Beats 75.53%
// Memory 16.1 MB Beats 56.82%

class Solution {
public:
    vector<TreeNode*> build(int start, int end){
        vector<TreeNode*> result;
        if(start > end){
            result.push_back(NULL);
            return result;
        }

        for(int i = start; i<=end; i++){
            vector<TreeNode*> left = build(start, i-1);
            vector<TreeNode*> right = build(i+1, end);

            for(int j = 0; j<left.size(); j++){
                for(int k = 0; k<right.size(); k++){
                    TreeNode* parent = new TreeNode(i);
                    parent->left = left[j];
                    parent->right = right[k];
                    result.push_back(parent);
                }
            }
        }

        return result;
    }
    vector<TreeNode*> generateTrees(int n) {
        return build(1, n);
    }
};

 

 

 

 

 

저작자표시 (새창열림)

'PS > PS Log' 카테고리의 다른 글

23.08.08. 풀었던 문제들 복기  (1) 2023.08.09
23.08.07. 풀었던 문제들 복기  (0) 2023.08.09
23.08.04. 풀었던 문제들 복기  (0) 2023.08.05
23.08.02. 풀었던 문제들 복기  (0) 2023.08.02
23.08.01. 풀었던 문제들 복기  (0) 2023.08.01
    hyelie
    hyelie

    티스토리툴바