https://school.programmers.co.kr/learn/courses/30/lessons/76502
#include <string>
#include <vector>
#include <stack>
using namespace std;
int solution(string s) {
int answer = 0;
for (int i = 0; i < s.length(); ++i)
{
stack<char> st;
bool flag = false;
for (int i = 0; i < s.length(); ++i)
{
if (s[i] == '[' || s[i] == '{' || s[i] == '(')
{
flag = true;
st.push(s[i]);
}
else
{
if (s[i] == ']' && st.top() == '[')
st.pop();
if (s[i] == '}' && st.top() == '{')
st.pop();
if (s[i] == ')' && st.top() == '(')
st.pop();
}
}
if (st.empty() && flag) answer++;
char ch = s.front();
s.erase(s.begin());
s.push_back(ch);
}
return answer;
}
내가 스택을 잘 활용하지 못해서 괄호문제에 약한 것 같다.
괄호는 무조건 거의 스택인데 잘 알아둬야겠다.for문으로 탐색하면서 여는괄호를 만나면 flag를 true로 하고 push한다.
닫는 괄호를 만났을 시 스택의 top과 맞는 닫는 괄호이면 pop을 한다.
스택이 비어있고 flag가 true면 answer++한다.
그 후 괄호를 회전시켜준다.