https://school.programmers.co.kr/learn/courses/30/lessons/76502
처음에는 시프트 연산을 쓰려고 했는데, string이라 고민했다.
근데 문자열의 길이도 그닥 길지 않아서, 괜찮을 것 같았다.
pop_front
, push_back
이 필요함
-> 그러면 앞뒤로 모두 접근이 가능한 자료구조를 쓰자
-> deque
괄호 연산의 유효검사는 stack
을 이용했다.
이지하게 10분컷했던 문제
#include <string>
#include <vector>
#include <iostream>
#include <stack>
#include <deque>
using namespace std;
bool isValid(deque<char> s)
{
stack<char> st;
for(auto& c : s) {
if (c == ']') {
if (st.empty()) return false;
if (st.top() == '[')
st.pop();
else return false;
}
else if (c == '}') {
if (st.empty()) return false;
if (st.top() == '{')
st.pop();
else return false;
}
else if (c == ')') {
if (st.empty()) return false;
if (st.top() == '(')
st.pop();
else return false;
}
else
st.push(c);
}
if (!st.empty()) return false;
else return true;
}
int solution(string s) {
int answer = 0;
deque<char> deq;
for(auto& c : s)
deq.push_back(c);
for (int i =0 ;i < s.length() ; i++) {
char c = deq[0];
deq.pop_front();
deq.push_back(c);
if (isValid(deq)) answer++;
}
return answer;
}