본문 바로가기

PS_Baekjoon

[백준 C++] 11899번 : 괄호 끼워넣기

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

 

11899번: 괄호 끼워넣기

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

www.acmicpc.net

풀이 :
- 백준 9012번과 비슷한 문제라서 이 문제를 푼다면 9012도 바로 해결할 수 있다
- 올바르지 못한 괄호의 갯수를 구하면 되는데, 
   ( 이 나오는 경우 : 카운트한다
   ) 이 나오는 경우 : 카운트 된 열린 괄호가 없다면 닫힌 괄호를 카운트해주고, 있다면 차감한다
- 올바르지 못한 괄호 중 (의 갯수와 )의 갯수가 구해지는데, 그것의 합을 출력한다
 
코드 :

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

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

    int open, close;
    string s;

    cin >> s;
    open = close = 0;
    for(int i=0; i<s.size(); i++){
        if(s[i] == '('){ //열린 괄호가 나오면 카운트
            open++;
        }else{
            if(open > 0){ //닫힌 괄호가 들어왔고, 카운트된 열린 괄호가 있다면
                open--;//합이 맞는 것이기 때문에 차감
            }else{ //카운트 된 열린 괄호가 없다면
                close++; //닫힌 괄호 차감
            }
        }
    }
    cout << open + close << '\n';
}