본문 바로가기

문제풀이/C++

[C++] 올바른 괄호

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