프로그래머스 - 괄호 회전하기

well-life-gm·2021년 10월 28일
0

프로그래머스

목록 보기
3/125

프로그래머스 - 괄호 회전하기

스택을 활용하면 금방 풀 수 있다.
0 ~ s.size()까지 shift를 하면서
[ { ( 를 만나면 스택에 푸쉬하고, ] } )를 만나면 조건에 맞춰서 스택의 탑을 빼준다.
만약 탑에서 빼주려할 때 스택이 비어있거나, 알맞는 짝이 아니라면 해당 shift는 올바르지 않은 괄호 문자열이라 break하고 넘어간다.

#include <string>
#include <vector>
#include <stack>
using namespace std;

int solution(string s) {
    int answer = 0;
    int size = s.size();
    stack<char> st;
    
    for(int shift=0; shift<size; shift++) {
        bool isGood = true;
        int end = shift + size;
        for(int i=shift; i<end; i++) {
            int idx = i % size;
            
            if(s[idx] == '[' || s[idx] == '{' || s[idx] == '(')
                st.push(s[idx]);
            else {
                if(st.empty()) {
                    isGood = false;
                    break;
                }
                if(s[idx] == ']') {
                    if(st.top() == '[')
                        st.pop();
                } else if(s[idx] == '}') {
                    if(st.top() == '{')
                        st.pop();
                } else if(s[idx] == ')') {
                    if(st.top() == '(')
                        st.pop();
                } else {
                    isGood = false;
                    break;
                }
            }
        }
        
        if(isGood && st.empty())
            answer++;
    }
    
    return answer;
}
profile
내가 보려고 만든 블로그

0개의 댓글