Evaluate Reverse Polish Notation (STRING-TYPE CONVERTION)

18432 단어 convert
Question
Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are +, -, *,/. Each operand may be an integer or another expression.Some examples: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13/5)) -> 6
1ST TRY
class Solution {

public:

    int evalRPN(vector<string> &tokens) {

        int operant1;

        int operant2;

        string str;

        int ret;

        bool firstOp = false;

        

        for(int i = 0; i < tokens.size(); i++)

        {

            str = tokens[i];

            if(!firstOp)

            {

                operant1 = getInt(str);;

                firstOp = true;

            }

            else if(str == "+")

            {

                ret = operant1 + operant2;

            }

            else if(str == "-")

            {

                ret = operant1 - operant2;

            }

            else if(str == "*")

            {

                ret = operant1 * operant2;

            }

            else if(str == "/")

            {

                ret = operant1 / operant2;

            }

            else

            {

                operant2 = getInt(str);

                firstOp = false;

            }

        }

        

        return ret;

    }

    int getInt(string str)

    {

        int ret = 0;

        for(int i = 0; i < str.length(); i++)

        {

            ret = ret*10 + str[i];

        }

        return ret;

    }

};

 
2ND TRY
하나의 조작수만 있는 상황을 고려하다
class Solution {

public:

    int evalRPN(vector<string> &tokens) {

        int operant1;

        int operant2;

        string str;

        int ret;

        bool firstOp = false;

        

        for(int i = 0; i < tokens.size(); i++)

        {

            str = tokens[i];

            if(!firstOp)

            {

                operant1 = getInt(str);

                firstOp = true;

            }

            else if(str == "+")

            {

                operant1 += operant2;

            }

            else if(str == "-")

            {

                operant1 -= operant2;

            }

            else if(str == "*")

            {

                operant1 *= operant2;

            }

            else if(str == "/")

            {

                operant1 /= operant2;

            }

            else

            {

                operant2 = getInt(str);

            }

        }

        return operant1;

    }

    

    int getInt(string str)

    {

        int ret = 0;

        for(int i = 0; i < str.length(); i++)

        {

            ret = ret*10 + (str[i]-'0');

        }

        return ret;

    }

};

Result: Wrong
Input: ["3","-4","+"]Output: -23Expected: -1
3RD TRY
음수를 고려하다
class Solution {

public:

    int evalRPN(vector<string> &tokens) {

        int operant1;

        int operant2;

        int ret;

        string str;

        stack<int> operantStack;

        

        for(int i = 0; i < tokens.size(); i++)

        {

            str = tokens[i];

            if(str == "+")

            {

                operant2 = operantStack.top();

                operantStack.pop();

                operant1 = operantStack.top();

                operantStack.pop();

                operantStack.push(operant1 + operant2);

            }

            else if(str == "-")

            {

                operant2 = operantStack.top();

                operantStack.pop();

                operant1 = operantStack.top();

                operantStack.pop();

                operantStack.push(operant1 - operant2);

            }

            else if(str == "*")

            {

                operant2 = operantStack.top();

                operantStack.pop();

                operant1 = operantStack.top();

                operantStack.pop();

                operantStack.push(operant1 * operant2);

            }

            else if(str == "/")

            {

                operant2 = operantStack.top();

                operantStack.pop();

                operant1 = operantStack.top();

                operantStack.pop();

                operantStack.push(operant1 / operant2);

            }

            else

            {

                operantStack.push(getInt(str));

            }

        }

        return operantStack.top();

    }

    

    int getInt(string str)

    {

        int ret = 0;

        bool negFlag = false;

        for(int i = 0; i < str.length(); i++)

        {

            if(str[i]=='-') negFlag = true;

            else if(negFlag)

            {

                ret = ret*10 - (str[i]-'0');

            }

            else

            {

                ret = ret*10 + (str[i]-'0');

            }

        }

        return ret;

    }

};

Result: Accepted
4TH TRY
내장 함수atoi를 사용하여string을 int로 변환
class Solution {

public:

    int evalRPN(vector< string > &tokens) {

        stack< int > operandStack;

        int operand1;

        int operand2;

        for(int i = 0; i < tokens.size(); i++){

            if(tokens[i]=="+"){

                operand1 = operandStack.top();

                operandStack.pop();

                operand2 = operandStack.top();

                operandStack.pop();

                operand2 += operand1;

                operandStack.push(operand2);

            }

            else if(tokens[i]=="-"){

                operand1 = operandStack.top();

                operandStack.pop();

                operand2 = operandStack.top();

                operandStack.pop();

                operand2 -= operand1;

                operandStack.push(operand2);

            }

            else if(tokens[i]=="*"){

                operand1 = operandStack.top();

                operandStack.pop();

                operand2 = operandStack.top();

                operandStack.pop();

                operand2 *= operand1;

                operandStack.push(operand2);

            }

            else if(tokens[i]=="/"){

                operand1 = operandStack.top();

                operandStack.pop();

                operand2 = operandStack.top();

                operandStack.pop();

                operand2 /= operand1;

                operandStack.push(operand2);

            }

            else{

                operand1 = atoi(tokens[i].c_str());

                operandStack.push(operand1);

            }

        }

        return operandStack.top();

    }

};

Result: Accepted

좋은 웹페이지 즐겨찾기