백준/기타
4949번: 균형잡힌 세상 [C++]
Koalitsiya
2023. 4. 10. 18:12
문제
풀이
문자열을 받아 여는 괄호는 스택에 담고, 닫는 괄호는 스택이 비어있지 않고, 스택의 탑이 해당 닫는 괄호와 매칭이 되는 여는 괄호인지 체크해서 두 조건을 만족하면 pop() 만족하지 않으면 flag를 false로 바꾸고 break 한다.
이후 스택이 비어있고, flag가 true면 균형잡힌 문자열이므로 yes 출력, 아니라면 no를 출력하도록 한다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
while (true) {
bool flag = true;
string s;
stack<char> bracket;
getline(cin, s);
if (s == ".") break;
for (int i = 0; i < s.length(); i++) {
char c = s[i];
if (c == '(' || c == '[')
bracket.push(c);
else if (c == ')') {
if (!bracket.empty() && bracket.top() == '(')
bracket.pop();
else {
flag = false;
break;
}
}
else if (c == ']') {
if (!bracket.empty() && bracket.top() == '[')
bracket.pop();
else {
flag = false;
break;
}
}
}
if (bracket.empty() && flag == true) cout << "yes\n";
else cout << "no\n";
}
return 0;
}