Maximum count of Equilateral Triangles that can be formed within given Equilateral Triangle
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++
#include <iostream>
using namespace std;
int No_of_Triangle( int N, int K)
{
if (N < K)
return -1;
else {
int Tri_up = 0;
Tri_up = ((N - K + 1)
* (N - K + 2))
/ 2;
int Tri_down = 0;
Tri_down = ((N - 2 * K + 1)
* (N - 2 * K + 2))
/ 2;
return Tri_up + Tri_down;
}
}
int main()
{
int N = 4, K = 2;
cout << No_of_Triangle(N, K);
return 0;
}
|
Java
import java.util.*;
class GFG{
static int No_of_Triangle( int N, int K)
{
if (N < K)
return - 1 ;
else
{
int Tri_up = 0 ;
Tri_up = ((N - K + 1 ) * (N - K + 2 )) / 2 ;
int Tri_down = 0 ;
Tri_down = ((N - 2 * K + 1 ) *
(N - 2 * K + 2 )) / 2 ;
return Tri_up + Tri_down;
}
}
public static void main(String[] args)
{
int N = 4 , K = 2 ;
System.out.print(No_of_Triangle(N, K));
}
}
|
Python3
def No_of_Triangle(N, K):
if (N < K):
return - 1 ;
else :
Tri_up = 0 ;
Tri_up = ((N - K + 1 ) *
(N - K + 2 )) / / 2 ;
Tri_down = 0 ;
Tri_down = ((N - 2 * K + 1 ) *
(N - 2 * K + 2 )) / / 2 ;
return Tri_up + Tri_down;
if __name__ = = '__main__' :
N = 4 ; K = 2 ;
print (No_of_Triangle(N, K));
|
C#
using System;
class GFG{
static int No_of_Triangle( int N, int K)
{
if (N < K)
return -1;
else
{
int Tri_up = 0;
Tri_up = ((N - K + 1) * (N - K + 2)) / 2;
int Tri_down = 0;
Tri_down = ((N - 2 * K + 1) *
(N - 2 * K + 2)) / 2;
return Tri_up + Tri_down;
}
}
public static void Main(String[] args)
{
int N = 4, K = 2;
Console.Write(No_of_Triangle(N, K));
}
}
|
Javascript
<script>
function No_of_Triangle(N, K)
{
if (N < K)
return -1;
else {
let Tri_up = 0;
Tri_up = Math.floor(((N - K + 1)
* (N - K + 2))
/ 2);
let Tri_down = 0;
Tri_down = Math.floor(((N - 2 * K + 1)
* (N - 2 * K + 2))
/ 2);
return Tri_up + Tri_down;
}
}
let N = 4, K = 2;
document.write(No_of_Triangle(N, K));
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Last Updated :
23 Mar, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...