-
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를 한 번 더 출력!'알고리즘 풀이 > 백준' 카테고리의 다른 글
[2164] 백준 : 카드2(C++) (0) 2020.04.27 [18258] 백준 : 큐2(C++) (0) 2020.04.27 [10773] 백준 : 제로(C++) (0) 2020.04.27 [11729] 하노이 탑 이동 순서(C++) (0) 2020.04.27 [2447] 백준 : 별 찍기 - 10(C++) (0) 2020.04.26 댓글