Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 숫자와 +, - 연산자를 사용한 배열 표현식 평가하기

이 문제에서는 표현식을 나타내는 n개의 문자열 값으로 구성된 배열 arr[]가 주어집니다. 우리의 과제는 숫자와 +, - 연산자만 포함된 배열 표현식을 평가하는 것입니다.

표현식에는 오직 숫자, '+' 문자, '-' 문자만 포함되며, 다른 연산자나 괄호는 존재하지 않습니다.

예제로 문제 이해하기

입력: arr = {"5", "+", "2", "-8", "+", "9"}

출력: 8

설명:

주어진 표현식은 5 + 2 - 8 + 9 = 8 이므로 결과값은 8입니다.

해결 접근 방법

이 문제는 배열을 왼쪽에서 오른쪽으로 순회하면서 각 연산을 차례대로 수행한 뒤, 최종 값을 반환하는 방식으로 해결할 수 있습니다. 이때 배열에 저장된 숫자는 문자열 형태이므로, stoi() 함수를 사용하여 정수 값으로 변환해야 합니다.

구체적인 동작 과정은 다음과 같습니다.

  • 배열의 첫 번째 요소(숫자)를 결과값의 초기값으로 설정합니다.
  • 인덱스 2부터 두 칸씩 건너뛰며 숫자 요소를 탐색합니다.
  • 현재 숫자 바로 앞의 연산자가 '+'이면 결과값에 더하고, 그렇지 않으면('-') 결과값에서 뺍니다.
  • 모든 요소를 처리한 후 최종 결과값을 반환합니다.

솔루션 구현 예제

#include <bits/stdc++.h>
using namespace std;

int solveExp(string arr[], int n) {

    if (n == 0)
    return 0;
    int value, result;
    result = stoi(arr[0]);

    for (int i = 2; i < n; i += 2)
    {
        int value = stoi(arr[i]);
        if (arr[i - 1 ] == "+")
            result += value;
        else
            result -= value;
    }
    return result;
}

int main() {

    string arr[] = { "5", "-", "3", "+", "8", "-", "1" };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout<<"The solution of the equation is "<<solveExp(arr, n);
    return 0;
}

출력 −

The solution of the equation is 9

위 프로그램에서 표현식은 5 - 3 + 8 - 1 = 9 이므로, 최종적으로 9가 출력됩니다. 이 알고리즘은 배열을 한 번만 순회하므로 시간 복잡도는 O(n)이며, 추가적인 공간 복잡도는 O(1)입니다.