Post

leetcode(리트코드)3월13일 challenge823-Binary Trees With Factors

leetcode(리트코드)3월13일 challenge823-Binary Trees With Factors

leetcode March 13일 - Binary Trees With Factors 문제입니다.

1. 문제

https://leetcode.com/problems/binary-trees-with-factors/


2. Input , Output


3. 분류 및 난이도

Medium 난이도입니다.
3월 13일자 챌린지 문제입니다.


4. 문제 해석

  • arr에 들어있는 숫자로 만들 수 있는 트리의 개수를 셉니다.
  • 트리의 조건은 양쪽의 자식 노드를 곱해서 부모노드를 만들 수 있으면 됩니다.
  • DP로 풀 수 있습니다. 왜냐하면 자식 노드를 곱해서 부모노드를 만들 수 있으므로 사실상 두 자식 노드를 만들 수 있는 경우의 수를 더하면 그 부모노드를 만들 수 있는 경우의 수가 되기 때문입니다.

5. code

c++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
    int numFactoredBinaryTrees(vector<int>& arr) {
        int mod = pow(10,9) + 7;
        sort(arr.begin(),arr.end());
        unordered_map<int,long> dp;
        long result = 0;
        for(size_t i =0;i<arr.size();++i)
        {
            dp[arr[i]] = 1;
            for(int j = 0 ; j<i;++j)
            {
                if(arr[i] % arr[j] == 0)
                    dp[arr[i]] = (dp[arr[i]] + dp[arr[j]] * dp[arr[i] /arr[j]]) %mod;
            }
            result =  (result + dp[arr[i]])%mod;
        }
        return result;
    }
};



python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
    def numFactoredBinaryTrees(self, arr: List[int]) -> int:
        dp ={}
        result = 0
        mod = pow(10,9) + 7
        arr.sort()
        
        for i in range(len(arr)):
            dp[arr[i]] = 1
            for j in range(i):
                if arr[i] % arr[j] == 0:
                    if(arr[i]//arr[j]) in dp : 
                        dp[arr[i]] = (dp[arr[i]] + dp[arr[j]] *(dp[arr[i] // arr[j]])) %mod
                    else:
                        dp[arr[i]//arr[j]] =0
            result = (result+ dp[arr[i]]) %mod
        
        return result

6. 결과 및 후기, 개선점

c++ 40% python 50%

This post is licensed under CC BY 4.0 by the author.