괄호 맞추는 문제는 대부분 스택을 사용해 해결 가능하다.
#include <string>
#include <vector>
#include <stack>
using namespace std;
bool check(string s) {
stack<char> st;
for (char ch : s) {
if (ch == '(' || ch == '{' || ch == '[') st.push(ch);
if (ch == ')') {
if (st.empty() || st.top() != '(') return false;
st.pop();
}
if (ch == '}') {
if (st.empty() || st.top() != '{') return false;
st.pop();
}
if (ch == ']') {
if (st.empty() || st.top() != '[') return false;
st.pop();
}
}
if (!st.empty()) return false;
return true;
}
int solution(string s) {
int answer = 0, size = s.size(), i;
for (i = 0; i < size; i++) {
char tmp = s[s.size() - 1];
s.pop_back();
s = tmp + s;
if (check(s)) answer++;
}
return answer;
}