문제 풀이/알고스팟
알고스팟 - 짝이 맞지 않는 괄호 (BRACKETS2) [C++]
JJJaewon
2023. 12. 9. 15:16
반응형
이 문제는 스택을 이용해서 간단하게 풀 수 있다. 문자열의 길이가 최대 10,000 이므로 테스트케이스까지 고려했을 때 O(n^2) 알고리즘은 사용할 수 없다. 스택을 이용하면 한번의 순회만으로 가능하므로 O(n) 시간이 소요되어 1초를 넘기지 않는다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool correct(char left, char right) {
if (left == '(' && right == ')') {
return true;
}
if (left == '{' && right == '}') {
return true;
}
if (left == '[' && right == ']') {
return true;
}
return false;
}
bool solve(string &input) {
stack<char> st;
for (char c : input) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
continue;
}
if (st.empty()) {
return false;
}
if (!correct(st.top(), c)) {
return false;
}
st.pop();
}
if (!st.empty()) {
return false;
}
return true;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int C;
cin >> C;
for (int test = 0; test < C; test++) {
string input;
cin >> input;
bool answer = solve(input);
if (answer) {
cout << "YES" << '\n';
continue;
}
cout << "NO" << '\n';
}
return 0;
}
반응형