알고리즘 풀이/백준
[4949] 백준 : 균형잡힌 세상(C++)
데롱디롱
2020. 4. 27. 02:35
728x90
* 접근한 방법
- getline으로 한 문장씩 받아와서 확인
- ( , [ 가 들어오는경우 => push
- ) , ] 가 들어오는 경우 => 앞에서 여는 기호가 나온 경우 pop, 아닌 경우 no출력
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
while (1)
{
string s;
getline(cin, s);
if (s.compare(".") == 0)
break;
stack<char> st;
int flag = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '(' || s[i] == '[')
st.push(s[i]);
else if(s[i] == ')')
{
if (!st.empty() && st.top() == '(')
st.pop();
else
{
cout << "no\n";
flag = 1;
break;
}
}
else if (s[i] == ']')
{
if (!st.empty() && st.top() == '[')
st.pop();
else
{
cout << "no\n";
flag = 1;
break;
}
}
}
if(flag==0)
if (st.empty())
cout << "yes\n";
else
cout << "no\n";
}
}
* 생각하지 못한 점
- 문장이 끝날 때 까지 no가 나오지 않은 경우, 마지막에 yes를 출력하는데 이렇게하면 no는 yes를 또 출력할 수도 있음
=> flag를 이용(no가 나온 경우, flag=1로 바꿔주고 flag가 0일때만 출력!)
- [ab 와 같이 여는 기호만 나온 경우, 아무것도 출력하지 않았음
=> 마지막에 st이 비어있지 않으면 no를 한 번 더 출력!