#include#include #include #include using namespace std; bool IsValid(const string str); bool IsOpenSymbol(const char target); bool IsSymmetric(const char source, const char target); int main() { int caseNum = 0; cin >> caseNum; cin.ignore(); for (int cIter = 0; cIter < caseNum; cIter++) { string brackets; std::getline(std::cin, brackets); // Process if (IsValid(brackets)) cout << "YES" << endl; else cout << "NO" << endl; } } bool IsValid(const string str) { stack bstack; int arrLength = str.length() + 1; char* chars = new char[arrLength]; strcpy_s(chars, arrLength, str.c_str()); for (int i = 0; i < arrLength; i++) { if (bstack.size() == 0) bstack.push(chars[i]); else if (IsOpenSymbol(chars[i])) bstack.push(chars[i]); else if (IsSymmetric(bstack.top(), chars[i])) bstack.pop(); else return false; } return true; } bool IsOpenSymbol(const char target) { if (target == '(' || target == '{' || target == '[') return true; else return false; } bool IsSymmetric(const char source, const char target) { if (source == '(' && target == ')') return true; else if (source == '{' && target == '}') return true; else if (source == '[' && target == ']') return true; else return false; }
꽤나 쉬운 문제..
책에서는 "({]" string 과 ")}]" string을 인덱스로 접근하면서 input 들이 대칭인지 확인하였다.
반응형
'Algorithm > Data Structures' 카테고리의 다른 글
ITES (0) | 2019.10.03 |
---|---|
JOSEPHUS (0) | 2019.03.18 |