스택구조를 이용해 문제를 풀었다.
일반 문자는 무시하고 괄호가 나올 때마다 조건을 걸었는데,
순서대로 문자를 순회하다 닫히는 괄호가 나왔을 때 스택의 탑이 동일한 쌍{ ( (, ) ), ( [, ] ), ( {, } )}이 아니라면 no를 출력할 수 있도록 했다.
마지막까지 정상적으로 열고 닫는게 완료되면 yes가 출력된다.
#include <iostream>
#include <stack>
int main(void) {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
char str[110] = { NULL };
while (true) {
std::cin.getline(str, 110, '\n');
if (str[0] == '.') {
break;
}
std::stack<char> mS;
for(int i = 0; str[i] != '.'; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
mS.push(str[i]);
}
else if (mS.empty()) {
if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
mS.push('X');
break;
}
}
else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if ((mS.top() == '(' && str[i] == ')') ||
(mS.top() == '[' && str[i] == ']') ||
(mS.top() == '{' && str[i] == '}')) {
mS.pop();
}
else {
break;
}
}
}
if (mS.empty()) {
std::cout << "yes" << "\n";
}
else {
std::cout << "no" << "\n";
}
}
return 0;
}
|
cs |
'problem solving' 카테고리의 다른 글
7576번: 토마토 (0) | 2020.03.03 |
---|---|
6588번: 골드바흐의 추측 (0) | 2020.03.03 |
3108번: 로고 (0) | 2020.03.02 |
2667번: 단지번호붙이기 (0) | 2020.03.02 |
[미해결]2632번: 피자판매 (0) | 2020.03.01 |