#9012. 괄호

sese·2022년 1월 3일
0

백준

목록 보기
1/8

알고리즘

스택을 이용하여 알고리즘을 구현했으며, "(" 가 입력되면 스택에 push해주고 ")" 가 입력되면 스택에서 pop해주었다. 그 결과, ")" 가 입력 되었을 때 스택이 비어있거나, 문자열이 끝났을 때 스택에 값이 남아있으면 NO, 그렇지 않으면 YES를 출력해준다.

c++

int main() {
   
    int n;
    cin >> n;
    
    while(n--) {

        // 문자형 스택 선언
		// 스택을 반복문 안에서 선언해줘야 매번 스택이 초기화된다.
        stack<char> st;

        bool result = true;
        string vps;
        
        // 괄호들을 입력받는다 -> ()()()(())
        cin >> vps;
        
        for (int i=0; i<vps.size(); i++) {

            if (vps[i] == '(') {
            	// '('가 입력 되었을 때 스택에 '('을 넣어준다
                st.push('(');
            } else {
            	// ')'가 입력 되었을 때
                if (st.empty()) {
                	// 스택에 비어있으면, result를 false로 바꿔준다
                    result = false;
                    // 반복문을 빠져나간다
                    break;
                } else {
                	// 스택이 비어져있지 않으면, 가장 위 값을 제거한다.
                    st.pop();
                }
            }
        }
        
        // 스택이 비어져있지 않으면, result를 false로 바꿔준다
        if (!st.empty()) {
            result = false;
        }
        
        // result가 true면 yes를, false면 no를 출력해준다
        if (result) {
            cout << "YES" << "\n";
        } else {
            cout << "NO" << "\n";
        }
    }
}
profile
예전 글은 다크모드로 봐야 잘 보일 수도 있습니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN