-
백준 9012 괄호 [C++]알고리즘 2018. 11. 25. 21:30
문제 링크 : https://www.acmicpc.net/problem/9012
소스코드
#include <iostream>#include <string>#include <stack>using namespace std;bool vps(string ps) {stack<char> s;bool sw = true;for (int i = 0; i < ps.size(); ++i) {if (ps[i] == '(')s.push(ps[i]);else if (!s.empty() && ps[i] == ')')s.pop();else if (s.empty() && ps[i] == ')') {sw = false;break;}}if (s.empty() && sw) return true;else return false;}int main() {int num;string ps;cin >> num;for (int i = 0; i < num; ++i) {cin >> ps;if (vps(ps)) cout << "YES" << endl;else cout << "NO" << endl;}}스택을 응용한 괄호가 맞는지 확인하는 문제입니다.
먼저 왼쪽 괄호는 스택에 삽입합니다.
오른쪽 괄호는 괄호의 짝이 맞는지 확인하기 위해 사용됩니다.
)를 만났는데 스택이 비어 있다면 왼쪽 괄호가 없다는 뜻이므로 잘못된 괄호입니다.
비어있지 않다면 짝이 있으므로 하나 씩 팝합니다.
모든 괄호를 연산한 후, 스택이 아직 남아있다면 왼쪽 괄호와 오른쪽 괄호의 짝이 맞지 않으므로 잘못된 괄호입니다.
모든 연산 후, 스택이 비어 있다면 괄호의 짝이 맞았다는 뜻이므로 true를 리턴합니다.
'알고리즘' 카테고리의 다른 글
백준 1874 스택 수열 [C++] (0) 2018.11.25 백준 5639 이진 검색 트리 [C++] (0) 2018.11.25 백준 1260 DFS와 BFS [C++] (0) 2018.11.25 백준 1991 트리 순회 [C++] (0) 2018.11.25 백준 10828 스택 [C++] (0) 2018.11.25