여러 개의 문장을 입력받고 있으므로 getline()을 사용한다.
getline()
#include <bits/stdc++.h>
using namespace std;
int main (void){
ios::sync_with_stdio(0);
cin.tie(0);
string str;
string ans;
while(1){
//문장 입력받기
getline(cin, str);
stack<char> s;
ans="yes";
if(str == ".") break;
//문장 읽기
for(auto c:str){
if(c =='['|| c=='(') s.push(c);
else if(c==')'){
if(!s.empty() && s.top() =='(') s.pop();
else ans = "no"; break;
}
else if(c==']'){
if(!s.empty() && s.top() =='[') s.pop();
else ans = "no"; break;
}
}
cout << ans<<'\n';
}
return 0;
}
20%에서 틀렸다!
반례가 있을텐데..
#include <bits/stdc++.h>
using namespace std;
int main (void){
ios::sync_with_stdio(0);
cin.tie(0);
string str;
string ans;
while(1){
//문장 입력받기
getline(cin, str);
ans="yes";
if(str == ".") break;
stack<char> s;
//문장 읽기
//([]())
for(auto c:str){ //
if(c =='['|| c=='(') s.push(c);
else if(c==')'){
if(!s.empty() && s.top() =='(') s.pop();
else ans = "no"; break;
}
else if(c==']'){
if(!s.empty() && s.top() =='[') s.pop();
else ans = "no"; break;
}
}
//s가 비어있지 않은 경우를 생각해주지않음
if(!s.empty()) ans = "no";
cout << ans<<'\n';
}
return 0;
}
예제 입력에서 첫번째 문장이 계속 no가 나온다.
왜????
#include <bits/stdc++.h>
using namespace std;
int main (void){
ios::sync_with_stdio(0);
cin.tie(0);
string str;
string ans;
while(1){
//문장 입력받기
getline(cin, str);
ans="yes";
if(str == ".") break;
stack<char> s;
//문장 읽기
for(auto c:str){ //aaa[(a]
if(c =='['|| c=='(') s.push(c);
else if(c==')'){
if(!s.empty() && s.top() =='(') s.pop();
else {ans = "no"; break;}
}
else if(c==']'){
if(!s.empty() && s.top() =='[') s.pop();
else {ans = "no"; break;}
}
}
//s가 비어있지 않은 경우를 생각해주지않음
if(!s.empty()) ans = "no";
cout << ans<<'\n';
}
return 0;
}
else 문에 여러 문장이 들어가는데 이게 한줄로 들어가더라도
ex)
else ans = "no"; break;
{}중괄호가 없으면 맨 첫번째 문장만 else문으로 취급해준다.