코딩테스트/백준

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

윤깡패 2023. 6. 9. 19:42

문제

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

 

풀이

그리디(Greedy) 알고리즘

 

그리디(Greedy) 알고리즘

그리디(Greedy) 알고리즘 현재 상태에서 볼 수 있는 선택지 중에 최선의 선택을 하는 알고리즘 + 구현하기 쉽다. + 시간 복잡도가 우수하다. - 항상 최적의 해를 보장하지 못한다. 그리디 알고리즘

soobin0821.tistory.com

 

 

코드

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

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  string str;
  cin >> str;

  vector<int> minus_numbers;
  vector<int> plus_numbers;
  string num;
  int minus_index = -1;

  for(int i = 0; i < str.length(); i++)
  {
    if(str[i] == '-')
    {
      minus_index = i;
      break;
    }
    else if(str[i] == '+')
    {
      plus_numbers.push_back(stoi(num));
      num.erase();
    }
    else
    {
      num += str[i];
    }
  }
  plus_numbers.push_back(stoi(num));
  num.erase();

  if(minus_index > -1)
  {
    for(int i = minus_index + 1; i < str.length(); i++)
    {
      if(str[i] == '-' || str[i] == '+')
      {
        minus_numbers.push_back(stoi(num));
        num.erase();
      }
      else
      {
        num += str[i];
      }
    }
    minus_numbers.push_back(stoi(num));
  }

  int result = 0;
  for(int i = 0; i < plus_numbers.size(); i++)
  {
    result += plus_numbers[i];
  }
  for(int i = 0; i < minus_numbers.size(); i++)
  {
    result -= minus_numbers[i];
  }

  cout << result;

  return 0;
}

 

 

 

728x90