Skip to content
Related Articles

Related Articles

Improve Article
Maximum count of Equilateral Triangles that can be formed within given Equilateral Triangle
  • Difficulty Level : Expert
  • Last Updated : 23 Mar, 2021

Given two integers N and K where N denotes the unit size of a bigger Equilateral Triangle, the task is to find the number of an equilateral triangle of size K that are present in the bigger triangle of side N.

Examples:

Input: N = 4, K = 3

Output: 3
Explanation:
There are 3 equilateral triangles of 3 unit size which are present in the Bigger equilateral triangle of size 4 units.



Input: N = 4, K = 2
Output: 7
Explanation:
There are 7 equilateral triangles of 2 unit size which are present in the Bigger equilateral triangle of size 4 units. 

Naive Approach: The idea is to iterate over all possible sizes of the bigger equilateral triangle for checking the number of triangles with the required size K and print the total count of triangles.

Time Complexity: O(N)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach, observe the following points:

  • The number of triangles with a peak in the upward direction of size K present in size N equals to ((N – K +1 ) * (N – K + 2))/2.
  • The number of inverted triangles with a peak in the downward direction of size K present in size N equals to ((N – 2K + 1) * (N – 2K + 2))/2.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <iostream>
using namespace std;
 
// Function to find the number of
// equilateral triangle formed
// within another triangle
int No_of_Triangle(int N, int K)
{
    // Check for the valid condition
    if (N < K)
        return -1;
 
    else {
 
        int Tri_up = 0;
 
        // Number of triangles having
        // upward peak
        Tri_up = ((N - K + 1)
                  * (N - K + 2))
                 / 2;
 
        int Tri_down = 0;
 
        // Number of inverted triangles
        Tri_down = ((N - 2 * K + 1)
                    * (N - 2 * K + 2))
                   / 2;
 
        // Total no. of K sized triangle
        return Tri_up + Tri_down;
    }
}
 
// Driver Code
int main()
{
    // Given N and K
    int N = 4, K = 2;
 
    // Function Call
    cout << No_of_Triangle(N, K);
    return 0;
}

Java




// Java program for the above approach
import java.util.*;
class GFG{
 
// Function to find the number of
// equilateral triangle formed
// within another triangle
static int No_of_Triangle(int N, int K)
{
    // Check for the valid condition
    if (N < K)
        return -1;
 
    else
    {
        int Tri_up = 0;
 
        // Number of triangles having
        // upward peak
        Tri_up = ((N - K + 1) * (N - K + 2)) / 2;
 
        int Tri_down = 0;
 
        // Number of inverted triangles
        Tri_down = ((N - 2 * K + 1) *
                    (N - 2 * K + 2)) / 2;
 
        // Total no. of K sized triangle
        return Tri_up + Tri_down;
    }
}
 
// Driver Code
public static void main(String[] args)
{
    // Given N and K
    int N = 4, K = 2;
 
    // Function Call
    System.out.print(No_of_Triangle(N, K));
}
}
 
// This code is contributed by PrinciRaj1992

Python3




# Python3 program for the above approach
 
# Function to find the number of
# equilateral triangle formed
# within another triangle
def No_of_Triangle(N, K):
   
    # Check for the valid condition
    if (N < K):
        return -1;
 
    else:
        Tri_up = 0;
 
        # Number of triangles having
        # upward peak
        Tri_up = ((N - K + 1) *
                  (N - K + 2)) // 2;
 
        Tri_down = 0;
 
        # Number of inverted triangles
        Tri_down = ((N - 2 * K + 1) *
                    (N - 2 * K + 2)) // 2;
 
        # Total no. of K sized triangle
        return Tri_up + Tri_down;
     
# Driver Code
if __name__ == '__main__':
    # Given N and K
    N = 4; K = 2;
 
    # Function Call
    print(No_of_Triangle(N, K));
 
# This code is contributed by sapnasingh4991

C#




// C# program for the above approach
using System;
class GFG{
 
// Function to find the number of
// equilateral triangle formed
// within another triangle
static int No_of_Triangle(int N, int K)
{
    // Check for the valid condition
    if (N < K)
        return -1;
 
    else
    {
        int Tri_up = 0;
 
        // Number of triangles having
        // upward peak
        Tri_up = ((N - K + 1) * (N - K + 2)) / 2;
 
        int Tri_down = 0;
 
        // Number of inverted triangles
        Tri_down = ((N - 2 * K + 1) *
                    (N - 2 * K + 2)) / 2;
 
        // Total no. of K sized triangle
        return Tri_up + Tri_down;
    }
}
 
// Driver Code
public static void Main(String[] args)
{
    // Given N and K
    int N = 4, K = 2;
 
    // Function Call
    Console.Write(No_of_Triangle(N, K));
}
}
 
// This code is contributed by Rajput-Ji

Javascript




<script>
 
// JavaScript program for the above approach
 
// Function to find the number of
// equilateral triangle formed
// within another triangle
function No_of_Triangle(N, K)
{
    // Check for the valid condition
    if (N < K)
        return -1;
 
    else {
 
        let Tri_up = 0;
 
        // Number of triangles having
        // upward peak
        Tri_up = Math.floor(((N - K + 1)
                * (N - K + 2))
                / 2);
 
        let Tri_down = 0;
 
        // Number of inverted triangles
        Tri_down = Math.floor(((N - 2 * K + 1)
                    * (N - 2 * K + 2))
                / 2);
 
        // Total no. of K sized triangle
        return Tri_up + Tri_down;
    }
}
 
// Driver Code
 
    // Given N and K
    let N = 4, K = 2;
 
    // Function Call
    document.write(No_of_Triangle(N, K));
 
 
// This code is contributed by Surbhi Tyagi.
 
</script>
Output: 
7

 

Time Complexity: O(1)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes




My Personal Notes arrow_drop_up
Recommended Articles
Page :