알고리즘/백준

백준 11899 괄호 끼워넣기

등반 2021. 12. 23. 23:56

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

 

11899번: 괄호 끼워넣기

첫 번째 줄에 S를 올바른 괄호열으로 만들기 위해 앞과 뒤에 붙여야 할 괄호의 최소 개수를 출력합니다. 불가능한 경우는 주어지지 않습니다.

www.acmicpc.net

'('가 나타나는 경우 스택에 넣어주고 ')'가 나타나는 경우 스택에서 빼주면 된다.

고려해야 할 것은 다음과 같다.

1. 충분한 '('가 없는데 ')'가 나오는 경우 -> 앞에 '('를 넣어줘야한다.

2. 마지막이 1개 이상의 '('으로 끝나는 경우 -> 뒤에 ')'를 넣어줘야한다.

 

이 문제의 경우 굳이 stack을 이용할 필요 없이, 정수 변수 cnt를 이용했다.

 

#include <iostream>
#define fio cin.tie(0)->sync_with_stdio(0)
using namespace std;

int main(){
    fio;
    int cnt = 0;
    int stack = 0;
//
    string S; cin >> S;
    for(int i=0; i<S.size(); i++){
        if(S[i] == '('){
            stack++;
        }else{// )
            if(stack > 0){
                stack--;
            }else{
                cnt++;
            }
        }
    }
    cnt += stack;
//
    cout << cnt;
    return 0;
}