해결된 질문
작성
·
160
1
#include <iostream>
#include <stack>
using namespace std;
int main() {
// ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
while(true)
{
string s;
getline(cin, s);
if(s == ".") break;
stack<int> _stack;
int flag = 0;
for(int i = 0; i < s.size(); i++) {
if(s[i] == '(' || s[i] == '[')
_stack.push(s[i]);
if(s[i] == ')' || s[i] == ']') {
if(_stack.size() == 0) {flag=1; break;}
else if(_stack.top() == '(' && s[i] == ')' || _stack.top() == '[' && s[i] == ']')
_stack.pop();
}
}
if(_stack.size() == 0 && flag == 0)
cout << "yes\n";
else
cout << "no\n";
}
return 0;
}
답변 1
0
안녕하세요. yunbinni님ㅎㅎ
먼저 코드 대부분은 맞지만 몇가지 고쳐야 할 부분이 있습니다.
stack<int> _stack; >> 이것보다는 stk 등 다른 변수명을 선언하는게 좋습니다. 언더바를 써서 하는 것은 옛날 스타일
else if((_stack.top() == '(' && s[i] == ')')|| (_stack.top() == '[' && s[i] == ']'))
>> 틀린 부분은 아니나 항상 이렇게 많은 식을 && 나 || 을 걸 때 우선순위로 소괄호로 위 코드처럼 걸어두시는게 좋습니다.
>> 여기서 맞왜틀이 많이 나옵니다.
반례입니다.
이걸 해결하지 못하네요.
[)]
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.