개발하는 kim-hasa

[c++][프로그래머스] 괄호 회전하기 본문

Algorithm/Programmers(c++)

[c++][프로그래머스] 괄호 회전하기

kim-hasa 2021. 9. 23. 13:49

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

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

괄호가 주어진 stirng을 회전시키면서 올바른 괄호인지 아닌지 확인하는 문제입니다.

 

가장 먼저 벡터로 string을 분리한 후, 시작 index를 증가시켜 가면서 확인합니다.

 

스택에서 넣으면서 비교하는데 , 올바른 문자열이라면 pop시키면서 마지막에 stack이 비게됩니다.

 

올바르지 않다면 중간에 멈추고 find변수를 false로 만듭니다.

 

또는 완료시 스택이 비어있지 않다면 올바르지 않은 괄호가 됩니다.

 

올바른 괄호시 answer를 증가시킵니다.

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

int solution(string s) {
    int answer = 0;
    
    vector<char> v1;
    int len = s.length();
    
    for(int i=0; i<len; i++)
    {
        v1.push_back(s[i]);
    }   // 벡터에 입력
    
    for(int j=0; j<len; j++)
    {
        stack<char> s1;     // 스택
        bool find = true;   // 확인하는 변수
        
        for(int k = j; k < j+len; k++)
        {
            int index = k;
            if(k >= len)
                index -= len;
            
            if(s1.empty())  // 비어있는 경우
            {
                if(v1[index] == '[' || v1[index] == '{' || v1[index] == '(')
                {
                    s1.push(v1[index]);
                }
                else
                {
                    find = false;
                    break;
                }
            }
            else
            {
                if(v1[index] == '[' || v1[index] == '{' || v1[index] == '(')
                {
                    s1.push(v1[index]);
                }
                else if(v1[index] == ']')
                {
                    if(s1.top() == '[')
                    {
                        s1.pop();
                    }
                    else
                    {
                        find = false;
                        break;
                    }
                }
                else if(v1[index] == ')')
                {
                    if(s1.top() == '(')
                    {
                        s1.pop();
                    }
                    else
                    {
                        find = false;
                        break;
                    }
                }
                else if(v1[index] == '}')
                {
                    if(s1.top() == '{')
                    {
                        s1.pop();
                    }
                    else
                    {
                        find = false;
                        break;
                    }
                }
            }
        }
        if(s1.empty() && find == true)
            answer++;
    }
    
    return answer;
}