728x90
스택 문제입니다.
1. 문자를 getline으로 줄 단위로 받습니다.
2. 각 문자를 확인하여 (, ), [, ]에 대해서 처리를 합니다.
3. (, [의 경우 stack에 push해줍니다.
)은 !empty이면서 top에 (가 있으면 pop해줍니다. 아닐 시 flag = true (초기값 false)
]도 !empty이면서 top에 [가 있으면 pop해줍니다. 아닐 시 flag = true
4. 모든 문자를 확인 한 후 flag가 true거나, !empty()면 no를 출력 아닐 시 yes를 출력
#include <iostream>
#include <cstring>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
bool flag;
string str;
stack<char> s;
while (1) {
flag = false;
while (!s.empty()) {
s.pop();
}
getline(cin, str);
if (str == ".") {
break;
}
for (int i = 0; i < str.length(); ++i) {
if (str[i] == '(' || str[i] == '[') {
s.push(str[i]);
}
else if (str[i] == ')') {
if (!s.empty() && s.top() == '(') {
s.pop();
}
else {
flag = true;
break;
}
}
else if (str[i] == ']') {
if (!s.empty() && s.top() == '['){
s.pop();
}
else {
flag = true;
break;
}
}
}
if (!s.empty() || flag == true) {
cout << "no" << endl;
}
else {
cout << "yes" << endl;
}
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 17298번 오큰수 (2) | 2019.09.05 |
---|---|
[C++] 백준 1874번 스택 수열 (0) | 2019.09.05 |
[C++] 백준 9012번 괄호 (0) | 2019.09.04 |
[C++] 백준 2164번 카드2 (0) | 2019.09.04 |
[C++] 백준 10773번 제로 (0) | 2019.09.04 |