Given an array arr[] consisting of N strings, the task is to find the total sum of the array brr[] (initially empty) constructed by performing following operations while traversing the given array arr[]:
- If the array arr[] contains an integer, then insert that integer into the array brr[].
- If the array arr[] has the string “+”, then insert the sum of the last two elements in the array brr[] into the array brr[].
- If the array arr[] has the string “D”, then insert the value which is twice the last element of the array brr[] to the array brr[].
- If the array arr[] has the string “C”, then remove the last element of the array brr[] to the array brr[].
Examples:
Input: arr[] = {“5”, “2”, “C”, “D”, “+”}
Output: 30
Explanation:
While traversing the array arr[], the array brr[] is modified as:
- “5” – Add 5 to the array brr[]. Now, the array brr[] modifies to {5}.
- “2” – Add 2 to the array brr[]. Now, the array brr[] modifies to {5, 2}.
- “C” – Remove the last element from the array brr[]. Now, the array brr[] modifies to {5}.
- “D” – Add twice the last element of the array brr[] to the array brr[]. Now, the array brr[] modifies to {5, 10}.
- “+” – Add the sum of the last two elements of the array brr[] to the array brr[]. Now the array brr[] modifies to {5, 10, 15}.
After performing the above operations, the total sum of the array brr[] is 5 + 10 + 15 = 30.
Input: arr[] = {“5”, “-2”, “4”, “C”, “D”, “9”, “+”, “+”}
Output: 27
Approach: The idea to solve the given problem is to use a Stack. Follow the steps below to solve the problem:
- Initialize a stack of integers, say S, and initialize a variable, say ans as 0, to store the resultant sum of the array formed.
-
Traverse the given array arr[] and perform the following steps:
- If the value of arr[i] is “C”, then subtract the top element of the stack from the ans and pop it from S.
- If the value of arr[i] is “D”, then push twice the top element of the stack S in the stack S and then add its value to ans.
- If the value of arr[i] is “+”, then push the value of the sum of the top two elements of the stack S and add their sum to ans.
- Otherwise, push arr[i] to the stack S, and add its value to ans.
- After the loop, print the value of ans as the result.
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the sum of the array // formed by performing given set of // operations while traversing the array ops[] void findTotalSum(vector<string>& ops)
{ // If the size of array is 0
if (ops.empty()) {
cout << 0;
return ;
}
stack< int > pts;
// Stores the required sum
int ans = 0;
// Traverse the array ops[]
for ( int i = 0; i < ops.size(); i++) {
// If the character is C, remove
// the top element from the stack
if (ops[i] == "C" ) {
ans -= pts.top();
pts.pop();
}
// If the character is D, then push
// 2 * top element into stack
else if (ops[i] == "D" ) {
pts.push(pts.top() * 2);
ans += pts.top();
}
// If the character is +, add sum
// of top two elements from the stack
else if (ops[i] == "+" ) {
int a = pts.top();
pts.pop();
int b = pts.top();
pts.push(a);
ans += (a + b);
pts.push(a + b);
}
// Otherwise, push x
// and add it to ans
else {
int n = stoi(ops[i]);
ans += n;
pts.push(n);
}
}
// Print the resultant sum
cout << ans;
} // Driver Code int main()
{ vector<string> arr = { "5" , "-2" , "C" , "D" , "+" };
findTotalSum(arr);
return 0;
} |
// Java program for the above approach import java.io.*;
import java.lang.*;
import java.util.*;
class GFG
{ // Function to find the sum of the array
// formed by performing given set of
// operations while traversing the array ops[]
static void findTotalSum(String ops[])
{
// If the size of array is 0
if (ops.length == 0 )
{
System.out.println( 0 );
return ;
}
Stack<Integer> pts = new Stack<>();
// Stores the required sum
int ans = 0 ;
// Traverse the array ops[]
for ( int i = 0 ; i < ops.length; i++) {
// If the character is C, remove
// the top element from the stack
if (ops[i] == "C" ) {
ans -= pts.pop();
}
// If the character is D, then push
// 2 * top element into stack
else if (ops[i] == "D" ) {
pts.push(pts.peek() * 2 );
ans += pts.peek();
}
// If the character is +, add sum
// of top two elements from the stack
else if (ops[i] == "+" ) {
int a = pts.pop();
int b = pts.peek();
pts.push(a);
ans += (a + b);
pts.push(a + b);
}
// Otherwise, push x
// and add it to ans
else {
int n = Integer.parseInt(ops[i]);
ans += n;
pts.push(n);
}
}
// Print the resultant sum
System.out.println(ans);
}
// Driver Code
public static void main(String[] args)
{
String arr[] = { "5" , "-2" , "C" , "D" , "+" };
findTotalSum(arr);
}
} // This code is contributed by Kingash. |
# Python3 program for the above approach # Function to find the sum of the array # formed by performing given set of # operations while traversing the array ops[] def findTotalSum(ops):
# If the size of array is 0
if ( len (ops) = = 0 ):
print ( 0 )
return
pts = []
# Stores the required sum
ans = 0
# Traverse the array ops[]
for i in range ( len (ops)):
# If the character is C, remove
# the top element from the stack
if (ops[i] = = "C" ):
ans - = pts[ - 1 ]
pts.pop()
# If the character is D, then push
# 2 * top element into stack
elif (ops[i] = = "D" ):
pts.append(pts[ - 1 ] * 2 )
ans + = pts[ - 1 ]
# If the character is +, add sum
# of top two elements from the stack
elif (ops[i] = = "+" ):
a = pts[ - 1 ]
pts.pop()
b = pts[ - 1 ]
pts.append(a)
ans + = (a + b)
pts.append(a + b)
# Otherwise, push x
# and add it to ans
else :
n = int (ops[i])
ans + = n
pts.append(n)
# Print the resultant sum
print (ans)
# Driver Code if __name__ = = "__main__" :
arr = [ "5" , "-2" , "C" , "D" , "+" ]
findTotalSum(arr)
# This code is contributed by ukasp.
|
// C# program for the above approach using System;
using System.Collections.Generic;
class GFG{
// Function to find the sum of the array // formed by performing given set of // operations while traversing the array ops[] static void findTotalSum( string []ops)
{ // If the size of array is 0
if (ops.Length == 0)
{
Console.WriteLine(0);
return ;
}
Stack< int > pts = new Stack< int >();
// Stores the required sum
int ans = 0;
// Traverse the array ops[]
for ( int i = 0; i < ops.Length; i++)
{
// If the character is C, remove
// the top element from the stack
if (ops[i] == "C" )
{
ans -= pts.Pop();
}
// If the character is D, then push
// 2 * top element into stack
else if (ops[i] == "D" )
{
pts.Push(pts.Peek() * 2);
ans += pts.Peek();
}
// If the character is +, add sum
// of top two elements from the stack
else if (ops[i] == "+" )
{
int a = pts.Pop();
int b = pts.Peek();
pts.Push(a);
ans += (a + b);
pts.Push(a + b);
}
// Otherwise, push x
// and add it to ans
else
{
int n = Int32.Parse(ops[i]);
ans += n;
pts.Push(n);
}
}
// Print the resultant sum
Console.WriteLine(ans);
} // Driver Code public static void Main()
{ string []arr = { "5" , "-2" , "C" , "D" , "+" };
findTotalSum(arr);
} } // This code is contributed by ipg2016107 |
<script> // JavaScript program for the above approach // Function to find the sum of the array // formed by performing given set of // operations while traversing the array ops[] function findTotalSum(ops)
{ // If the size of array is 0
if (ops.length==0) {
document.write( 0);
return ;
}
var pts = [];
// Stores the required sum
var ans = 0;
// Traverse the array ops[]
for ( var i = 0; i < ops.length; i++) {
// If the character is C, remove
// the top element from the stack
if (ops[i] == "C" ) {
ans -= pts[pts.length-1];
pts.pop();
}
// If the character is D, then push
// 2 * top element into stack
else if (ops[i] == "D" ) {
pts.push(pts[pts.length-1] * 2);
ans += pts[pts.length-1];
}
// If the character is +, add sum
// of top two elements from the stack
else if (ops[i] == "+" ) {
var a = pts[pts.length-1];
pts.pop();
var b = pts[pts.length-1];
pts.push(a);
ans += (a + b);
pts.push(a + b);
}
// Otherwise, push x
// and add it to ans
else {
var n = parseInt(ops[i]);
ans += n;
pts.push(n);
}
}
// Print the resultant sum
document.write( ans);
} // Driver Code var arr = [ "5" , "-2" , "C" , "D" , "+" ];
findTotalSum(arr); </script> |
30
Time Complexity: O(N)
Auxiliary Space: O(N)