알고리즘 문제풀이/프로그래머스

[프로그래머스/Level 2] 괄호 회전하기 (C++)

노력의천재 2021. 4. 16. 14:29

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

 

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

 

programmers.co.kr

문자열 s의 크기만큼 괄호를 왼쪽으로 한칸씩 회전하면서 스택을 이용하여 올바른 괄호인지 검증하는 문제였습니다.

 

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

// 괄호를 왼쪽으로 한칸 회전
string rotate(string str) {
    string res = str;
    char tmp = res[0];
    res.erase(0, 1);
    res.push_back(tmp);
    return res;
}

// 올바른 괄호인지 검증
bool isCorrect(string str) {
    stack<char> st;
    for(int i = 0; i < str.size(); i++) {
        if(str[i] == '(' || str[i] == '{' || str[i] == '[') {
            st.push(str[i]);
        } else {
            if(st.empty()) return false;
            else {
                if(st.top() == '(' && str[i] == ')') st.pop();
                else if(st.top() == '{' && str[i] == '}') st.pop();
                else if(st.top() == '[' && str[i] == ']') st.pop();
            }
        }
    }
    if(!st.empty()) return false;
    return true;
}

int solution(string s) {
    int answer = 0;
    if(isCorrect(s)) answer++; 
    for(int i = 1; i < s.size(); i++) {
        s = rotate(s);
        if(isCorrect(s)) answer++;
    }
    return answer;
}