Algorithm


Problem link- https://www.spoj.com/problems/ONP/

ONP - Transform the Expression

 

Transform the algebraic expression with brackets into RPN form (Reverse Polish Notation). Two-argument operators: +, -, *, /, ^ (priority from the lowest to the highest), brackets ( ). Operands: only letters: a,b,...,z. Assume that there is only one RPN form (no expressions like a*b*c).

Input

t [the number of expressions <= 100]
expression [length <= 400]
[other expressions]

Text grouped in [ ] does not appear in the input file.

Output

The expressions in RPN form, one per line.

Example

Input:
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))

Output:
abc*+
ab+zx+*
at+bac++cd+^*

 

Code Examples

#1 Code Example with Java Programming

Code - Java Programming

import java.io.*;
import java.util.*;

import java.util.Stack;

class Immutable{
	public static void main(String[] args){
		InputReader in = new InputReader(System.in);
		OutputWriter out = new OutputWriter(System.out);
		int t = in.readInt();
		while(t-- > 0){
			String input = in.readString();
			Stack<Character> stack = new Stack < >();
			for(int i = 0;i < input.length(); i ++){
				if(input.charAt(i) >= 97 && input.charAt(i) <=122){
					out.print(input.charAt(i));
				}else if(input.charAt(i)==')'){
					out.print(stack.pop());
					stack.pop();
				}else{
					stack.push(input.charAt(i));
				}
			}
			out.printLine();
		}
		out.flush();
		out.close();
	}
}



class InputReader
{
	private InputStream stream;
	private byte[] buf = new byte[1024];
	private int curChar;
	private int numChars;
	private SpaceCharFilter filter;

	public InputReader(InputStream stream)
	{
		this.stream = stream;
	}

	public int read()
	{
		if (numChars == -1)
			throw new InputMismatchException();
		if (curChar >= numChars)
		{
			curChar = 0;
			try
			{
				numChars = stream.read(buf);
			} catch (IOException e)
			{
				throw new InputMismatchException();
			}
			if (numChars <= 0)
				return -1;
		}
		return buf[curChar++];
	}

	public int readInt()
	{
		int c = read();
		while (isSpaceChar(c))
			c = read();
		int sgn = 1;
		if (c == '-')
		{
			sgn = -1;
			c = read();
		}
		int res = 0;
		do
		{
			if (c < '0' || c > '9')
				throw new InputMismatchException();
			res *= 10;
			res += c - '0';
			c = read();
		} while (!isSpaceChar(c));
		return res * sgn;
	}

	public String readString()
	{
		int c = read();
		while (isSpaceChar(c))
			c = read();
		StringBuilder res = new StringBuilder();
		do
		{
			res.appendCodePoint(c);
			c = read();
		} while (!isSpaceChar(c));
		return res.toString();
	}
	public double readDouble() {
		int c = read();
		while (isSpaceChar(c))
			c = read();
		int sgn = 1;
		if (c == '-') {
			sgn = -1;
			c = read();
		}
		double res = 0;
		while (!isSpaceChar(c) && c != '.') {
			if (c == 'e' || c == 'E')
				return res * Math.pow(10, readInt());
			if (c < '0' || c > '9')
				throw new InputMismatchException();
			res *= 10;
			res += c - '0';
			c = read();
		}
		if (c == '.') {
			c = read();
			double m = 1;
			while (!isSpaceChar(c)) {
				if (c == 'e' || c == 'E')
					return res * Math.pow(10, readInt());
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				m /= 10;
				res += (c - '0') * m;
				c = read();
			}
		}
		return res * sgn;
	}
	public long readLong() {
		int c = read();
		while (isSpaceChar(c))
			c = read();
		int sgn = 1;
		if (c == '-') {
			sgn = -1;
			c = read();
		}
		long res = 0;
		do {
			if (c < '0' || c > '9')
				throw new InputMismatchException();
			res *= 10;
			res += c - '0';
			c = read();
		} while (!isSpaceChar(c));
		return res * sgn;
	}
	public boolean isSpaceChar(int c)
	{
		if (filter != null)
			return filter.isSpaceChar(c);
		return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
	}

	public String next()
	{
		return readString();
	}

	public interface SpaceCharFilter
	{
		public boolean isSpaceChar(int ch);
	}
}

class OutputWriter
{
	private  PrintWriter writer;

	public OutputWriter(OutputStream outputStream)
	{
		writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
	}

	public OutputWriter(Writer writer)
	{
		this.writer = new PrintWriter(writer);
	}

	public void print(Object... objects)
	{
		for (int i = 0; i < objects.length; i++)
		{
			if (i != 0)
				writer.print(' ');
			writer.print(objects[i]);
		}
	}

	public void printLine(Object... objects)
	{
		print(objects);
		writer.println();
	}

	public void close()
	{
		writer.close();
	}

	public void flush()
	{
		writer.flush();
	}

}
Copy The Code & Try With Live Editor

Input

x
+
cmd
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))

Output

x
+
cmd
abc*+
ab+zx+*
at+bac++cd+^*

#2 Code Example with C++ Programming

Code - C++ Programming

#include<bits/stdc++.h>
using namespace std;
char str[405];
int main()
{
    int tc;
    scanf("%d",&tc);
    while(tc--){
        scanf("%s",str);
        stack<char>st;
        int len = strlen(str);
        for(int i=0; i<len; i++){
            if(str[i]=='(')
                st.push(str[i]);
            else if(str[i]==')'){
                char ch = st.top();
                st.pop();
                st.pop();
                printf("%c",ch);
            }
            else if(isalpha(str[i])) printf("%c",str[i]);
            else st.push(str[i]);
        }
        printf("\n");
    }
    return 0;
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))

Output

x
+
cmd
abc*+
ab+zx+*
at+bac++cd+^*
Advertisements

Demonstration


SPOJ Solution-Transform the Expression-Solution in C, C++, Java, Python

Previous
SPOJ Solution - Test Life, the Universe, and Everything - Solution in C, C++, Java, Python