Algorithm/PS

[알고리즘] 괄호 회전하기

Basaeng 2026. 7. 10. 18:34

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

평범한 스택문제입니다.

 

괄호하면 바로 스택이 떠오르죠 '['가 top이라면 ]가 들어왔을 때 pop을 하는 등의 여러 응용을 하게됩니다.

 

해당 문제는 기본적인  괄호 stack문제에서 순환 키워드만 들고왔습니다. 단순히 인덱스를 순회하면서 같은 함수를 타게 만들어주면됩니다.

 

더 최적화할 수 있겠지만 빠르게 코딩해보았습니다.

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

bool check(string& s, int startIdx, int size)
{
    stack<char> stk;
        
    for (int i = 0; i < size; ++i)
    {
        int curIdx = (startIdx + i + size) % size;

        if (stk.empty())
        {
            stk.push(s[curIdx]);
        }
        else
        {
            char top = stk.top();
            if (s[curIdx] == ')' && top == '(')
            {
                stk.pop();
            }
            else if (s[curIdx] == '}' && top == '{')
            {
                stk.pop();
            }
            else if (s[curIdx] == ']' && top == '[')
            {
                stk.pop();
            }
            else
            {
                stk.push(s[curIdx]);
            }
        }
    }

    return stk.size() == 0;
}

int solution(string s) {
    int answer = 0;

    int size = s.size();

    for (int i = 0; i < size; ++i)
    {
        if (check(s, i, size))
            ++answer;
    }

    return answer;
}

코드를 읽으면 최적화할만한 부분을 많이 볼 수 있을 것입니다.