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


스택을 활용하는 문제

정답제출코드


#include <string>
#include <vector>
#include <stack>

using namespace std;

bool isOK(string s)
{
    stack<char> st;
    
    int len = s.length();
    
    for (int i = 0; i < len; ++i)
    {
        if (st.empty())
            st.push(s[i]);
        
        else
        {
            if (s[i] == ')' && st.top() == '(')
                st.pop();
            else if (s[i] == '}' && st.top() == '{')
                st.pop();
            else if (s[i] == ']' && st.top() == '[')
                st.pop();
            else
                st.push(s[i]);
        }
    }
    
    if (st.empty())
        return true;
    else
        return false;
}

int solution(string s) {
    
    int answer = 0;
    
    int len = s.length();
    
    for (int i = 0; i < len; ++i)
    {
        if (isOK(s))
            answer++;

        s.push_back(s.front());
        s.erase(0, 1);
    }
    
    return answer;
}


삽질한 내용


원래는 아래 코드가 아니라

    s.push_back(s.front());
    s.erase(0, 1);

아래의 코드로 작성했었다.

    s.push_back(s[0]);
    s.erase(0);

우선, string의 erase는 두 개의 인자가 들어가야 한다는 것을 간과했다.

    s.erase(지우기 시작할 인덱스, 지울 문자 개수)

여기서 지울 문자 개수를 안넣어줘서 오류가 났었던 것 아닐까? 생각해본다.


© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2