코드
#include <string>
#include <stack> // 스택
using namespace std;
int solution(string s) {
int answer = 0;
string check=s+s; // 괄호는 한 번씩만 회전하기에 더함으로써 범위 별로 나눔 ex) [](){} + [](){}
for(int i=0;i<s.size();i++){
bool n=true; // 괄호 검사용 값
stack<char> st; // 스택 이용
for(int j=i;j<s.size()+i;j++){ // i 범위 별 만큼 이동
if(check[j]=='[' || check[j]=='{' || check[j]=='('){
st.push(check[j]);
}else if(check[j]==']' || check[j]=='}' || check[j]==')'){ // 첫 스택 값이 ']', '}', ')' 들어갈 경우 괄호 검사 실패
if(st.empty()){
n=false;
break;
}
switch(check[j]){ // 괄호 검사 통과 할 경우는 pop() 실행, 아닐 시는 같은 괄호 아님
char temp;
case ']':
temp=st.top();
if(temp=='['){
st.pop();
}else{
n=false;
}
break;
case '}':
temp=st.top();
if(temp=='{'){
st.pop();
}else{
n=false;
}
break;
case ')':
temp=st.top();
if(temp=='('){
st.pop();
}else{
n=false;
}
break;
}
}
}
if(!st.empty()){ // 스택이 비어있지 않으면 괄호 검사 실패
n=false;
}
if(n){ // n 값이 true가 유지 될 경우 괄호 검사 성공으로 answer 값 증감
answer++;
}
}
return answer;
}
'C++ > programmers 코딩테스트(level 2) C++' 카테고리의 다른 글
[C/C++] programmers Level 2 점프와 순간 이동 (0) | 2023.10.05 |
---|---|
[C/C++] programmers Level 2 짝지어 제거하기 (0) | 2023.10.05 |
[C/C++] programmers Level 2 N개의 최소공배수 (0) | 2023.09.30 |
[C/C++] programmers Level 2 주식가격 (0) | 2023.09.30 |
[C/C++] programmers Level 2 기능개발 (0) | 2023.09.29 |