즉. 올바른 VPS 괄호 여닫이여야만 한다.
#include <iostream>
#include <vector>
using namespace std;
// 입력 : 공백이 있는 문자열 ... 오로지 '.'만이 문자열의 끝을 알림.
// (), []만이 존재함.
// ( or [ 둘이 ([)] 인 경우 어떻게 처리할까..?
// ()[ || ([) 를 어캐 구분할까
int main()
{
vector<string> answer; // output
string str;
answer.clear();
while (1)
{
// 문자열 입력
getline(cin, str);
// stack init
vector<char> VectorStack;
if(str[0] == '.') break;
// 판별 ()
for(int i=0; i < str.size(); i++)
{ // 괄호를 입력 받으면
// 시작 괄호면 스택쌓기
if(str[i] == '(') VectorStack.push_back('(');
if(str[i] == '[') VectorStack.push_back('[');
if(str[i] == ')')
{ // 스택이 비어있지 않고 스택의 최 상단에 시작괄호가 있다면 스택제거
// () 인 경우 : 빈 스택으로 만듬
if(!VectorStack.empty() && *(VectorStack.end()-1) == '(')
VectorStack.pop_back();
// 빈 스택에 닫는괄호가 들어오면 no
// ) 인 경우 : no
else{ answer.push_back("no"); break; }
}
if(str[i] == ']')
{ // 스택이 비어있지 않고 스택의 최 상단에 시작괄호가 있다면 스택제거
// [] 인 경우 : 빈 스택으로 만듬
if(!VectorStack.empty() && *(VectorStack.end()-1) == '[')
VectorStack.pop_back();
// 빈 스택에 닫는괄호가 들어오면 no
// ) 인 경우 : no
else{ answer.push_back("no"); break; }
}
// 스택이 비어있고 .이 나오기 전까지 입력된 문자열을 확인했을 경우
if (VectorStack.empty() && i == str.length() - 2)
answer.push_back("yes");
// 스택이 비어있지 않고 입력된 문자열을 확인했을 경우
else if (!VectorStack.empty() && i == str.length() - 2)
answer.push_back("no");
}
}
for(auto el : answer)
cout << el << '\n';
}
스스로 푼 코드가 아니라.. 마음이 아프다..
한 문제를 가지고 끝까지 물고 늘어지는게 맞을까..
일정시간을 정해두고 서칭을 하며 푸는게 맞을까...(이번문제는 서칭해서 품 !)