쇠막대기
문제의 원본은 여기서 확인하세요.
- 자료구조 (스택)
일반 괄호 검사와 같이 '('의 경우 스택에 추가하고 ')'인 경우 스택에서 pop 한다.
그 후, 바로 직전의 문자가 '('이면 레이저를 의미하므로 레이저로 잘랐을때 생기는 파이프의 수만큼 가산한다.
레이저 밑에 있는 파이프의 수는 스택에 추가된 파이프 수와 같으므로 스택의 사이즈가 된다.
따라서 직전의 문자가 '('인 경우라면 스택의 사이즈 만큼 가산하고 아니라면 1을 가산한다.
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void) {
string pipeInString;
cin >> pipeInString;
stack <char> st;
int nPipes = 0;
for (int i = 0; i < pipeInString.size(); i++) {
if (pipeInString[i] == '(') {
st.push('(');
}
else {
st.pop();
// 레이저
if (pipeInString[i - 1] == '(') {
// 현제 레이저 밑에 있는 파이프 수 = 스택 사이즈
nPipes += st.size();
}
// 파이프의 끝
else {
nPipes++;
}
}
}
cout << nPipes << endl;
return 0;
}