문제
풀이
문자열을 받아 여는 괄호는 스택에 담고, 닫는 괄호는 스택이 비어있지 않고, 스택의 탑이 해당 닫는 괄호와 매칭이 되는 여는 괄호인지 체크해서 두 조건을 만족하면 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;
}
'백준 > 기타' 카테고리의 다른 글
[백준/C++] 10773번 : 제로 (0) | 2023.04.10 |
---|---|
9012번: 괄호 [C++] (0) | 2023.04.10 |
2164번: 카드2 [C++] (0) | 2023.04.10 |
1920번: 수 찾기 [C++] (0) | 2023.04.10 |
11866번: 요세푸스 문제 0 [C++] (0) | 2023.04.06 |