[백준] 1541번: 잃어버린 괄호

2018. 6. 2. 04:11알고리즘

 

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.

www.acmicpc.net

 

 

덧셈과 뺄셈, 그리고 괄호만을 이용해서 최솟값을 구하는 문제입니다.

 

한 번 '-'가 나오고 난 다음에는 괄호를 이용해서 그 다음 값들을 모두 빼줄 수 있기 때문에 처음 '-'가 나오면, 그 뒤의 수들은 모두 빼주면 됩니다.

 

 

#include <iostream>
#include <string>
using namespace std;

string equation;
int ans;

void input() {
  cin >> equation;
}

void addValue(int tmpNum, bool isMinus) {
  if (isMinus) {
    ans -= tmpNum;
  }
  else {
    ans += tmpNum;
  }
}

void calculate() {
  ans = 0;
  bool isMinus = false;

  int size = equation.size();

  int tmpNum = 0;
  for (int i = 0; i < size; i++) {
    if ('0' <= equation[i] && equation[i] <= '9') {
      tmpNum = tmpNum * 10 + (equation[i] - '0');
    }
    else {
      addValue(tmpNum, isMinus);

      if (equation[i] == '-') {
        isMinus = true;
      }

      tmpNum = 0;
    }

    if (i == size - 1) {
      addValue(tmpNum, isMinus);
    }
  }
}

void printAnswer() {
  cout << ans << '\n';
}

int main() {
  input();
  calculate();
  printAnswer();

  return 0;
}

'알고리즘' 카테고리의 다른 글

[백준] 10610번: 30  (0) 2018.06.03
[백준] 1744번: 수 묶기  (0) 2018.06.03
[백준] 11399번: ATM  (0) 2018.06.02
[백준] 1931번: 회의실 배정  (0) 2018.06.02
[백준] 11047번: 동전 0  (0) 2018.05.31