작성
·
91
0
답변 1
0
안녕하세요 yjs님 ㅎㅎ
전체적인 로직은 잘 짜셨는데 일부 반례를 해결하지 못하는 것 같아요 ㅎㅎ
먼저 반례는 다음과 같습니다.
[)].
yjs 님 : yes
답: no
그리고 제가 yjs님 코드를 좀 다듬어 봤는데요.
이렇게 하시면 됩니다.
#include <iostream>
#include <stack>
using namespace std;
int main() {
while (true) {
string s;
stack<char> st;
getline(cin, s);
if (s == ".") break;
bool isBalanced = true;
for (int i = 0; i < s.size(); i++) {
if (s[i] != '(' && s[i] != ')' && s[i] != '[' && s[i] != ']') continue;
if (s[i] == '(' || s[i] == '[') {
st.push(s[i]);
} else if (s[i] == ')' || s[i] == ']') {
if (st.empty()) {
isBalanced = false;
break;
}
if ((s[i] == ')' && st.top() == '(') || (s[i] == ']' && st.top() == '[')) {
st.pop();
} else {
break;
}
}
}
if (!st.empty()) isBalanced = false;
if (isBalanced) {
cout << "yes" << "\n";
} else {
cout << "no" << "\n";
}
}
return 0;
}
isBalanced를 추가하면서 일부로직을 다듬었습니다.
참고부탁드립니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.