본문 바로가기

Algorithm

(C++) - 백준(BOJ) 10799번:쇠막대기 답

반응형
/*레이저는 여는 괄호와 닫는 괄호의 인접한 쌍 ‘( ) ’ 으로 표현된다. 또한, 모든 ‘( ) ’는 반드시 레이저를 표현한다.
쇠막대기의 왼쪽 끝은 여는 괄호 ‘ ( ’ 로, 오른쪽 끝은 닫힌 괄호 ‘) ’ 로 표현된다. */
#include <iostream>
#include <stack>
#include <string>
using namespace std;
//1.'('가 나올 때마다 개수를 세어준다 - > 세어주는 조건은 2번에---
//2.'()', '(())'를 구분해주어야한다 인덱스 차이가 1이 나는지 확인하고 push여부를 결정
string k;
stack <int> o;
int cnt,ksize;
int main() {
    cin >> k;
    ksize = k.size();
    for (int i = 0; i < ksize; i++)
    {
        if (k[i] == '(')
        {
            o.push(i);
        }
        else//')'가 나왔을 때
        {
            if (o.top()+1==i)//'()'가 나왔을 때 - > 레이저
            {
                o.pop();
                cnt += o.size();
            }
            else//'(())'일 때 '('를 빼주고 1을 더해준다
            {
                o.pop();
                cnt++;
            }
        }
    }
    cout << cnt;
}