728x90
[목적]
괄호를 입력 받아 올바른 괄호면 "YES", 올바르지 않으면 "NO"를 출력한다.
[입력 예제 1]
(()(()))(()
[출력 예제 1]
NO
[입력 예제 2]
()()(()())
[출력 예제 2]
YES
괄호를 입력 받은 후 오른쪽 괄호와 왼쪽 괄호의 순서에 맞춰 짝이 맞게 나올 경우에는 YES를 출력하고 그렇지 않은 경우는 NO를 출력해준다.
[필요지식]
Stack
push()
pop()
top()
[코드]
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(void) {
string str;
stack<int> s;
cin >> str;
//문자열의 길이만큼 반복문 실행
for(int i=0; i<str.size(); i++){
//i번째 문자열이 '('이면 스택에 '(' push
if(str[i] == '('){
s.push('(');
}
//i번째 문자열이 ')'이면 실행
else{
//스택이 비어있지않고 제일 상단이 '('이면 '(' 삭제
if(!s.empty() && s.top() == '(')
s.pop();
//위의 조건에 맞지 않으면 스택에 ')' push
else
s.push(')');
}
}
//스택이 비어있으면 "YES" 출력, 그렇지 않으면 "NO" 출력
if(s.empty()) cout << "YES";
else cout << "NO";
return 0;
}
[실행 결과]
728x90
반응형
'문제풀이 > C++' 카테고리의 다른 글
[C++] 자릿수의 합 (0) | 2020.12.28 |
---|---|
[C++] 모두의 약수 (0) | 2020.12.27 |
[C++] 영어단어 복구 (0) | 2020.12.27 |
[C++] 숫자만 추출 (0) | 2020.12.27 |
[C++] 나이 계산 (0) | 2020.12.27 |