티스토리 뷰
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
괄호가 정상적인 괄호 문자열인지 검증하는 문제
정상적인 괄호라면 "YES"출력
아니라면 "NO" 출력
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
bool confirm(string object) {
if (!object.size()) return true;
if (object.size() % 2) return false;
if (object[0] == ')') return false;
if (object[object.size() - 1] == '(') return false;
stack<char> s;
s.push(object[0]);
for (int i = 1; i < object.size(); i++) {
if (s.size() && s.top() == '(' && object[i] == ')') s.pop();
else s.push(object[i]);
}
if (s.size()) return false;
return true;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<string> v;
int N = 0;
cin >> N;
for (int i = 0; i < N; i++) {
string basket = "";
cin >> basket;
v.push_back(basket);
}
for (int i = 0; i < N; i++) {
bool con = confirm(v[i]);
if (con)
cout << "YES" << "\n";
else
cout << "NO" << "\n";
}
return 0;
}
stack을 쓰면 간단하게 풀린다.
stack에 마지막에 쌓은 괄호가 여는 괄호이고 현재 가리키는 괄호가 닫는 괄호이면 stack의 top를 제거하며 대상 문자열을 모두 순회한 후 stack에 남아있는 괄호가 있다면 정상적인 괄호가 아니다.
Time complexity : O(N*M) 문자열의 갯수 * 문자열의 길이
Space complexity : O(N*M) 문자열의 갯수 * 문자열의 길이
'알고리즘 문제 풀이' 카테고리의 다른 글
[알고리즘문제] 백준 부분수열의 합 (0) | 2021.08.25 |
---|---|
[알고리즘문제] 백준 단어나누기 (0) | 2021.08.24 |
[알고리즘문제] 릿코드 Pascal's Triangle (0) | 2021.07.10 |
[알고리즘문제] 릿코드 Employee Importance (0) | 2021.06.11 |
[알고리즘문제] 릿코드 Count of Matches in Tournament (0) | 2021.05.29 |