알고리즘 문제 해결/BOJ

[그리디] BOJ 1541 잃어버린 괄호

jmkimmessi 2021. 11. 18. 00:00
반응형

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

문제 해결 알고리즘

 

그리디 알고리즘으로 '+'연산부터 전부 연산 해준 뒤 '-'연산을 해준다. 파싱해주는 게 까다로웠던 문제였다.

 

소스 코드

 

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

int main(){
  string str; cin >> str;
  int result = 99999999;
  string num = "";
  vector<int> number;
  vector<char> opt;

  for(int i=0;i<str.size();i++){
    if('0' <= str[i] && str[i] <= '9') num.push_back(str[i]);
    else {
      opt.push_back(str[i]);
      if(num != "")  {
        number.push_back(stoi(num));
        num = "";
      }
    }

    if(i == str.size() - 1){
      number.push_back(stoi(num));
      num = "";
    }
  }

  for(int i=0;i<opt.size();i++){
    if(opt[i] == '+'){
      number[i]+=number[i+1];
      number.erase(number.begin()+i+1);
      opt.erase(opt.begin()+i);
      i--;
    }
  }

  for(int i=0;i<opt.size();i++){
    if(opt[i] == '-'){
      number[i]-=number[i+1];
      number.erase(number.begin()+i+1);
      opt.erase(opt.begin()+i);
      i--;
    }
  }

  for(int i=0;i<number.size();i++) {
    result = min(result, number[i]);
  }

  cout << result;
}
반응형

'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글

[비트마스킹, 구현] BOJ 11723 집합  (0) 2021.11.24
[DP] BOJ 9465 스티커  (0) 2021.11.21
[DFS] BOJ 1967 트리의 지름  (0) 2021.11.15
[정렬] BOJ 18870 좌표 압축  (0) 2021.11.12
[그리디] BOJ 11399 ATM  (0) 2021.11.09