[C++로 풀이] 괄호 회전하기⭐⭐

Date:     Updated:

카테고리:

태그:

📌 괄호 회전하기

난이도 ⭐⭐

🚀 문제

image

image


🚀 내 풀이 ⭕

#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;
}

괄호 문제만 보면 그냥 바로 스택이 떠오른다..ㅋㅋㅋ 대부분의 괄호 여닫는 코테 문제들은 스택을 사용해야 했었던 것 같다. 아무튼! 여는 괄호일 땐 스택에 추가를 해주고 닫는 괄호가 나타났을 땐 스택의 top이 짝이 맞는 열린 괄호면 없애주는 식으로 하면 된다. 최종적으로 스택이 전부 비워졌다면 다 짝이 맞는 올바른 괄호 상태인 것이다! 주의해야 할 점은, 열린 괄호가 한번도 등장하지 않는 경우도 올바르지 못한 경우인데 이 경우는 스택에 추가 되는 경우가 없기 때문에 빈 스택 상태로 유지가 된다. 따라서 열린 괄호가 스택에 추가된 적이 한 번이라도 있어야 하고, 동시에 최종적으로 스택이 비어지는! 그런 상태가 될 때 answer를 카운팅해주면 된다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Programmers 카테고리 내 다른 글 보러가기

댓글 남기기