C++:: 프로그래머스 < 괄호 회전하기 >

jahlee·2023년 6월 16일
0

프로그래머스_Lv.2

목록 보기
57/106
post-thumbnail

주어진 문자열 s를 왼쪽으로 1칸씩 회전 시키며 조건에 맞는 올바른 괄호식인지 판별을해 나오는 가지수를 리턴해주는 문제이다. 크게 어렵지않다.

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

unordered_map <char, char> m = {{'{', '}'}, {'[', ']'}, {'(', ')'}};

int is_right(string str)
{//올바른 괄호문자열인지
    stack <char> st;

    for(int i=0;i<str.size();i++)
    {
        if (m[str[i]]) st.push(str[i]);// '[' '{' '(' 이면
        else if (!st.empty() && m[st.top()] == str[i]) st.pop();// 그외 스택이 비어있지않고 괄호 짝이 맞다면
        else st.push(str[i]);// 그외
    }
    if (!st.empty()) return (0);
    return (1);
}

int solution(string s)
{
    int answer = 0, len = s.size();
    for(int i=0;i<len;i++)
    {
        string tmp = s.substr(i, len-i) + s.substr(0, i);// 왼쪽으로 i만큼 회전시킨 새로운 문자열
        answer += is_right(tmp);
    }
    return answer;
}

0개의 댓글