[프로그래머스/C++]Lv.2 - 괄호 회전하기

YH J·2023년 9월 18일
0

프로그래머스

목록 보기
145/168

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/76502

다른 사람의 풀이

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

다른 사람의 풀이 해석

내가 스택을 잘 활용하지 못해서 괄호문제에 약한 것 같다.
괄호는 무조건 거의 스택인데 잘 알아둬야겠다.

for문으로 탐색하면서 여는괄호를 만나면 flag를 true로 하고 push한다.
닫는 괄호를 만났을 시 스택의 top과 맞는 닫는 괄호이면 pop을 한다.
스택이 비어있고 flag가 true면 answer++한다.
그 후 괄호를 회전시켜준다.

profile
게임 개발자 지망생

0개의 댓글