코딩스터디

1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기

애플앤마블 2019. 5. 5. 16:59
반응형
SMALL

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD&categoryId=AV14eWb6AAkCFAYD&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

본 문제는 swexpertacademy D4 P.1218에 대한 문제 임을 알립니다.

 

괄호 4종류 () [] {} <>로 이루어진 문자열이 올바른 괄호인지 찾는 문제입니다.

 

스택을 사용하여 풀었으며, 닫는 괄호가 나올 때 그 괄호와 짝이 맞으면 Pop을 하고 짝이 맞지 않으면 break

 

4종류의 닫는 괄호가 나오지 않으면 push를 진행하였고 모든 문자열을 돌았을 때 스택이 비어있으면 1을 출력 비어있지 않으면 0을 출력합니다.

출처 : swexpertacademy D4 P.1218 ( 상단 URL 참조 )

#include<iostream>
#include<stack>
#include<string>
using namespace std;
 
int main(){
    for(int t=1; t<=10; t++){
        cout<<"#"<<t<<" ";
        int nx;
        cin>>nx;
        stack<char> Ss;
        while(!Ss.empty()){
            Ss.pop();
        }
        string s;
        cin>>s;
        for(int i=0; i<s.size(); i++){
            if(s[i]==41){
                if(Ss.top()=='('){
                    Ss.pop();
                }
                else{ 
                    break;
                }
            }
            else if(s[i]==125){
                if(Ss.top()=='{'){
                    Ss.pop();
                }
                else {
                    break;
                }
            }
            else if(s[i]==93){
                if(Ss.top()=='['){
                    Ss.pop();
                }
                else{
                    break;
                }
            }
            else if(s[i]==62){
                if(Ss.top()=='<'){
                    Ss.pop();
                }
                else{
                    break;
                }
            }
            else Ss.push(s[i]);
        }
         
        if(Ss.empty()){
            cout<<'1'<<endl;
        }
        else if(!Ss.empty()){
            cout<<'0'<<endl;
        }
    }
    return 0;
}
반응형
LIST