Given two armies, A and B, have the same number of soldiers. The power of their soldiers is given by arr1[] and arr2[], where the i-th soldier of Army A fights only the i-th soldier of Army B.
- If arr1[i] > arr2[i], Army A wins the battle.
- If arr1[i] < arr2[i], Army B wins the battle.
- If arr1[i] == arr2[i], both soldiers are eliminated.
Return "A" if Army A wins more battles, "B" if Army B wins more battles, otherwise return "DRAW".
Examples:
Input: arr1[] = [2, 2], arr2[] = [5, 5]
Output: "B"
Explanation:
Battle 1: 2 < 5, so Army B wins.
Battle 2: 2 < 5, so Army B wins.
Army B wins 2 battles, while Army A wins 0 battles. Therefore, the winner is "B".
Input: arr1[] = [9], arr2[] = [8]
Output: "A"
Explanation:
Battle 1: 9 > 8, so Army A wins.
Army A wins 1 battle, while Army B wins 0 battles. Therefore, the winner is "A".
Table of Content
[Naive Approach] Store Result of Every Battle - O(n) Time and O(n) Space
The idea is to first determine the winner of each battle and store the result in an auxiliary array. After processing all battles, traverse the stored results and count the number of battles won by Army A and Army B. Finally, compare the counts to determine the overall winner.
#include <vector>
#include <iostream>
using namespace std;
string countryAtWar(vector<int> &arr1, vector<int> &arr2)
{
int n = arr1.size();
// Stores result of each battle:
// 1 -> Army A wins
// -1 -> Army B wins
// 0 -> Draw
vector<int> result(n);
for (int i = 0; i < n; i++)
{
if (arr1[i] > arr2[i])
result[i] = 1;
else if (arr1[i] < arr2[i])
result[i] = -1;
else
result[i] = 0;
}
int aWins = 0, bWins = 0;
for (int x : result)
{
if (x == 1)
aWins++;
else if (x == -1)
bWins++;
}
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
int main()
{
vector<int> arr1 = {9};
vector<int> arr2 = {8};
cout << countryAtWar(arr1, arr2);
return 0;
}
class GFG {
static String countryAtWar(int[] arr1, int[] arr2) {
int n = arr1.length;
// Stores result of each battle:
// 1 -> Army A wins
// -1 -> Army B wins
// 0 -> Draw
int[] result = new int[n];
for (int i = 0; i < n; i++) {
if (arr1[i] > arr2[i])
result[i] = 1;
else if (arr1[i] < arr2[i])
result[i] = -1;
else
result[i] = 0;
}
int aWins = 0, bWins = 0;
for (int x : result) {
if (x == 1)
aWins++;
else if (x == -1)
bWins++;
}
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
public static void main(String[] args) {
int[] arr1 = {9};
int[] arr2 = {8};
System.out.println(countryAtWar(arr1, arr2));
}
}
def countryAtWar(arr1, arr2):
n = len(arr1)
# Stores result of each battle:
# 1 -> Army A wins
# -1 -> Army B wins
# 0 -> Draw
result = [0] * n
for i in range(n):
if arr1[i] > arr2[i]:
result[i] = 1
elif arr1[i] < arr2[i]:
result[i] = -1
else:
result[i] = 0
aWins = result.count(1)
bWins = result.count(-1)
if aWins > bWins:
return "A"
if bWins > aWins:
return "B"
return "DRAW"
if __name__ == "__main__":
arr1 = [9]
arr2 = [8]
print(countryAtWar(arr1, arr2))
using System;
using System.Collections.Generic;
class GFG {
static string countryAtWar(int[] arr1, int[] arr2)
{
int n = arr1.Length;
// Stores result of each battle:
// 1 -> Army A wins
// -1 -> Army B wins
// 0 -> Draw
List<int> result = new List<int>();
for (int i = 0; i < n; i++) {
if (arr1[i] > arr2[i])
result.Add(1);
else if (arr1[i] < arr2[i])
result.Add(-1);
else
result.Add(0);
}
int aWins = 0, bWins = 0;
foreach(int x in result)
{
if (x == 1)
aWins++;
else if (x == -1)
bWins++;
}
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
static void Main()
{
int[] arr1 = { 9 };
int[] arr2 = { 8 };
Console.WriteLine(countryAtWar(arr1, arr2));
}
}
function countryAtWar(arr1, arr2) {
let n = arr1.length;
// Stores result of each battle:
// 1 -> Army A wins
// -1 -> Army B wins
// 0 -> Draw
let result = new Array(n).fill(0);
for (let i = 0; i < n; i++) {
if (arr1[i] > arr2[i])
result[i] = 1;
else if (arr1[i] < arr2[i])
result[i] = -1;
else
result[i] = 0;
}
let aWins = result.filter(x => x === 1).length;
let bWins = result.filter(x => x === -1).length;
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
// Driver Code
let arr1 = [9];
let arr2 = [8];
console.log(countryAtWar(arr1, arr2));
Output
A
[Expected Approach] Single Traversal Counting - O(n) Time and O(1) Space
The idea is to traverse both arrays once and maintain the number of battles won by each army. For every position, update the corresponding win count based on the comparison of soldier powers. Finally, compare the total wins to find the winner.
#include <vector>
#include <string>
using namespace std;
string countryAtWar(vector<int> &arr1, vector<int> &arr2)
{
int aWins = 0, bWins = 0;
// Compare the power of corresponding soldiers.
for (int i = 0; i < (int)arr1.size(); i++)
{
// Army A wins this battle.
if (arr1[i] > arr2[i])
{
aWins++;
}
// Army B wins this battle.
else if (arr1[i] < arr2[i])
{
bWins++;
}
// If powers are equal, both soldiers are eliminated.
// This battle contributes to neither army.
}
// Determine the overall winner.
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
int main()
{
vector<int> arr1 = {9};
vector<int> arr2 = {8};
cout << countryAtWar(arr1, arr2);
return 0;
}
import java.util.Arrays;
class GFG {
static String countryAtWar(int[] arr1, int[] arr2) {
int aWins = 0, bWins = 0;
// Compare the power of corresponding soldiers.
for (int i = 0; i < arr1.length; i++) {
// Army A wins this battle.
if (arr1[i] > arr2[i]) {
aWins++;
}
// Army B wins this battle.
else if (arr1[i] < arr2[i]) {
bWins++;
}
// If powers are equal, both soldiers are
// eliminated. This battle contributes to
// neither army.
}
// Determine the overall winner.
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
public static void main(String[] args) {
int[] arr1 = {9};
int[] arr2 = {8};
System.out.println(countryAtWar(arr1, arr2));
}
}
def countryAtWar(arr1, arr2):
aWins = 0
bWins = 0
# Compare the power of corresponding soldiers.
for i in range(len(arr1)):
# Army A wins this battle.
if arr1[i] > arr2[i]:
aWins += 1
# Army B wins this battle.
elif arr1[i] < arr2[i]:
bWins += 1
# If powers are equal, both soldiers are eliminated.
# This battle contributes to neither army.
# Determine the overall winner.
if aWins > bWins:
return "A"
if bWins > aWins:
return "B"
return "DRAW"
if __name__ == "__main__":
arr1 = [9]
arr2 = [8]
print(countryAtWar(arr1, arr2))
using System;
class GFG {
static string countryAtWar(int[] arr1, int[] arr2)
{
int aWins = 0, bWins = 0;
// Compare the power of corresponding soldiers.
for (int i = 0; i < arr1.Length; i++) {
// Army A wins this battle.
if (arr1[i] > arr2[i]) {
aWins++;
}
// Army B wins this battle.
else if (arr1[i] < arr2[i]) {
bWins++;
}
// If powers are equal, both soldiers are
// eliminated. This battle contributes to
// neither army.
}
// Determine the overall winner.
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
static void Main()
{
int[] arr1 = { 9 };
int[] arr2 = { 8 };
Console.WriteLine(countryAtWar(arr1, arr2));
}
}
function countryAtWar(arr1, arr2) {
let aWins = 0, bWins = 0;
// Compare the power of corresponding soldiers.
for (let i = 0; i < arr1.length; i++) {
// Army A wins this battle.
if (arr1[i] > arr2[i]) {
aWins++;
}
// Army B wins this battle.
else if (arr1[i] < arr2[i]) {
bWins++;
}
// If powers are equal, both soldiers are eliminated.
// This battle contributes to neither army.
}
// Determine the overall winner.
if (aWins > bWins)
return "A";
if (bWins > aWins)
return "B";
return "DRAW";
}
// Driver Code
let arr1 = [9];
let arr2 = [8];
console.log(countryAtWar(arr1, arr2));
Output
A