괄호 회전하기 : 문제 링크
- (), [], {} 는 모두 올바른 괄호 문자열이다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열이다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열이다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열이다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열이다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어진다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성
제한 사항
- s의 길이는 1 이상 1,000 이하이다.
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
for(int i = 0; i < s.size(); ++i) {
vector<char> check;
bool isCorrect = true;
for(int j = i; j < i + s.size(); ++j) {
int idx = j % s.size();
if(s[idx] == '(' || s[idx] == '{' || s[idx] == '[')
check.push_back(s[idx]);
else {
if(check.empty() ||
(s[idx] == ')' && check.back() != '(') ||
(s[idx] == '}' && check.back() != '{') ||
(s[idx] == ']' && check.back() != '[')) {
isCorrect = false;
break;
}
check.pop_back();
}
}
if(isCorrect && check.empty()) answer++;
}
return answer;
}