BRAKETS2 질문입니다

  • hsuser
    hsuser

    스택을 이용한 symbol 매칭입니다.

    class Stack
    {
    private:
    char s[10001];
    public:
    int top;
    Stack()
    {
    top=-1;
    }

    void push(char c)
    {
        top=top+1;
        s[top]=c;
    }
    char pop()
    {
        char c=s[top];
        top=top-1;
        return c;
    }

    };

    매칭이 맞으면 1을 반환 아니면 0을반환

    bool Brakets(char * b)
    {
    Stack S;
    char c;
    int i=0;
    while(b[i]!=0)
    {
    if(b[i]=='('||b[i]=='['||b[i]=='{') 열린 심볼일 경우 스택에 푸시
    S.push(b[i]);
    else if(b[i]==')'||b[i]==']'||b[i]=='}') 닫힌 심볼일 경우 비교 팝
    {
    if(S.top==-1)
    return 0;
    c=S.pop();
    if(b[i]==')')
    {
    if(c!='(')
    return 0;
    }
    else if(b[i]==']')
    {
    if(c!='[')
    return 0;
    }
    else if(b[i]=='}')
    {
    if(c!='{')
    return 0;
    }
    }
    i++;
    }
    return 1;
    }

    메인함수

    int main()
    {
    char braket[10001];
    bool YN[100]; //**YN이라는 배열에 결과값을 저장하여 YES or NO 출력**
    int num;
    cin>>num;

    for(int i=0;i<num;i++)
    {
        cin>>braket;
        YN[i]=Brakets(braket);
    }
    
    int j;
    for(j=0;j<num;j++)
    {
        if(YN[j]==1)
            cout<<"YES"<<endl;
        else 
            cout<<"NO"<<endl;
    }
    return 0;

    }
    //제가봣을땐 별 이상없어 보이는데 계속 오답이 뜨네요 ㅠㅠ


    11년 전
2개의 댓글이 있습니다.
  • kwangswei
    kwangswei

    {{} 와 같은 경우 처리가 안될 것 같군요~~


    11년 전 link
  • hsuser
    hsuser

    아 ~ 감사합니다 ㅠㅠ


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.