[프로그래머스] 괄호 회전하기 C++
in Study on Coding Test
스택을 활용하는 문제
정답제출코드
#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(지우기 시작할 인덱스, 지울 문자 개수)
여기서 지울 문자 개수를 안넣어줘서 오류가 났었던 것 아닐까? 생각해본다.