Given a 2D array knights[][] of size N * 2, with each row of the form { X, Y } representing the coordinates of knights, and an array pawn[] representing the coordinates of a pawn in an N * N board, the task is to find the count of knights present in the board that is attacking the pawn.
Examples:
Input: knights[][] = { { 0, 4 }, { 4, 5 }, { 1, 4 }, { 3, 1 } }, pawn[] = { 2, 3 }
Output: 2
Explanation:
The knights present at coordinate { { 0, 4 }, { 3, 1 } } are attacking the pawn.
Therefore, the required output is 2.Input: knights[][] = { { 4, 6 }, { 7, 5 }, { 5, 5 } }, pawn[] = { 6, 7 }
Output: 3
Explanation:
The knights present at coordinate { { 4, 6 }, { 7, 5 }, { 5, 5 } } are attacking the pawn.
Therefore, the required output is 3.
Approach: Follow the steps given below to solve the problem
- Initialize a variable, say cntKnights, to store the count of knights that are attacking the pawn.
- Traverse the knights[][] array using variable i and for every array element knights[i], check if the array { (knights[i][0] – pawn[0]), (knights[i][1] – pawn[1]) } is equal to either { 1, 2 } or { 2, 1 } or not. If found to be true, then increment the value of cntKnights by 1.
- Finally, print the value of cntKnights.
Below is the implementation of the above approach:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to count the knights that are // attacking the pawn in an M * M board int cntKnightsAttackPawn( int knights[][2], int pawn[], int M) { // Stores count of knights that // are attacking the pawn int cntKnights = 0; // Traverse the knights[][] array for ( int i = 0; i < M; i++) { // Stores absolute difference of X // co-ordinate of i-th knight and pawn int X = abs (knights[i][0] - pawn[0]); // Stores absolute difference of Y // co-ordinate of i-th knight and pawn int Y = abs (knights[i][1] - pawn[1]); // If X is 1 and Y is 2 or // X is 2 and Y is 1 if ((X == 1 && Y == 2) || (X == 2 && Y == 1)) { // Update cntKnights cntKnights++; } } return cntKnights; } // Driver Code int main() { int knights[][2] = { { 0, 4 }, { 4, 5 }, { 1, 4 }, { 3, 1 } }; int pawn[] = { 2, 3 }; // Stores total count of knights int M = sizeof (knights) / sizeof (knights[0]); cout << cntKnightsAttackPawn( knights, pawn, M); return 0; } |
Java
// Java program to implement // the above approach import java.io.*; import java.lang.Math; class GFG{ // Function to count the knights that are // attacking the pawn in an M * M board static int cntKnightsAttackPawn( int knights[][], int pawn[], int M) { // Stores count of knights that // are attacking the pawn int cntKnights = 0 ; // Traverse the knights[][] array for ( int i = 0 ; i < M; i++) { // Stores absolute difference of X // co-ordinate of i-th knight and pawn int X = Math.abs(knights[i][ 0 ] - pawn[ 0 ]); // Stores absolute difference of Y // co-ordinate of i-th knight and pawn int Y = Math.abs(knights[i][ 1 ] - pawn[ 1 ]); // If X is 1 and Y is 2 or // X is 2 and Y is 1 if ((X == 1 && Y == 2 ) || (X == 2 && Y == 1 )) { // Update cntKnights cntKnights++; } } return cntKnights; } // Driver code public static void main(String[] args) { int [][] knights = { { 0 , 4 }, { 4 , 5 }, { 1 , 4 }, { 3 , 1 } }; int [] pawn = new int []{ 2 , 3 }; // Stores total count of knights int M = knights.length; System.out.println(cntKnightsAttackPawn( knights, pawn, M)); } } // This code is contributed by vandanakillari54935 |
Python3
# Python program to implement # the above approach # Function to count the knights that are # attacking the pawn in an M * M board def cntKnightsAttackPawn(knights, pawn, M): # Stores count of knights that # are attacking the pawn cntKnights = 0 ; # Traverse the knights array for i in range (M): # Stores absolute difference of X # co-ordinate of i-th knight and pawn X = abs (knights[i][ 0 ] - pawn[ 0 ]); # Stores absolute difference of Y # co-ordinate of i-th knight and pawn Y = abs (knights[i][ 1 ] - pawn[ 1 ]); # If X is 1 and Y is 2 or # X is 2 and Y is 1 if ((X = = 1 and Y = = 2 ) or (X = = 2 and Y = = 1 )): # Update cntKnights cntKnights + = 1 ; return cntKnights; # Driver code if __name__ = = '__main__' : knights = [[ 0 , 4 ], [ 4 , 5 ], [ 1 , 4 ], [ 3 , 1 ]]; pawn = [ 2 , 3 ]; # Stores total count of knights M = len (knights); print (cntKnightsAttackPawn(knights, pawn, M)); # This code is contributed by Amit Katiyar |
C#
// C# program to implement // the above approach using System; class GFG { // Function to count the knights that are // attacking the pawn in an M * M board static int cntKnightsAttackPawn( int [,] knights, int [] pawn, int M) { // Stores count of knights that // are attacking the pawn int cntKnights = 0; // Traverse the knights[][] array for ( int i = 0; i < M; i++) { // Stores absolute difference of X // co-ordinate of i-th knight and pawn int X = Math.Abs(knights[i, 0] - pawn[0]); // Stores absolute difference of Y // co-ordinate of i-th knight and pawn int Y = Math.Abs(knights[i, 1] - pawn[1]); // If X is 1 and Y is 2 or // X is 2 and Y is 1 if ((X == 1 && Y == 2) || (X == 2 && Y == 1)) { // Update cntKnights cntKnights++; } } return cntKnights; } // Driver code static void Main() { int [,] knights = {{ 0, 4 }, { 4, 5 }, { 1, 4 }, { 3, 1 }}; int [] pawn = {2, 3}; // Stores total count of knights int M = knights.GetLength(0); Console.WriteLine(cntKnightsAttackPawn(knights, pawn, M)); } } // This code is contributed by divyeshrabadiya07 |
Javascript
<script> // javascript program for the above approach // Function to count the knights that are // attacking the pawn in an M * M board function cntKnightsAttackPawn(knights, pawn, M) { // Stores count of knights that // are attacking the pawn let cntKnights = 0; // Traverse the knights[][] array for (let i = 0; i < M; i++) { // Stores absolute difference of X // co-ordinate of i-th knight and pawn let X = Math.abs(knights[i][0] - pawn[0]); // Stores absolute difference of Y // co-ordinate of i-th knight and pawn let Y = Math.abs(knights[i][1] - pawn[1]); // If X is 1 and Y is 2 or // X is 2 and Y is 1 if ((X == 1 && Y == 2) || (X == 2 && Y == 1)) { // Update cntKnights cntKnights++; } } return cntKnights; } // Driver Code let knights = [[ 0, 4 ], [ 4, 5 ], [ 1, 4 ], [ 3, 1 ]]; let pawn = [2, 3]; // Stores total count of knights let M = knights.length; document.write(cntKnightsAttackPawn( knights, pawn, M)); </script> |
2
Time Complexity: O(M), where M is the total count number of knights
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!