Mismatched Parenthesis

  • Zenon
    Zenon

    안녕하세요, 코딩을 하다 문제가 해결이 안 되어서 글을 남기게 되었습니다.
    Mismatched Parenthesis 라는 문제인데요, 이 전 문제인 Brackets2 는 아무런 문제없이 잘 통과하여 이 문제또한 쉽게 통과할거라 생각했었는데 오답이라고 자꾸만 나오네요..
    개인적으로 이런 저런 예제들을 넣어서 해 봤을때에는 priority에 맞게 잘 작동을 하였는데 혹시 예외의 경우, 예를들어 제일 처음으로(앞으로) 오는 char가 왼쪽 가로 가 아닐 경우 오류가 나는 것인지 잘 모르겠네요..
    에러가 나는 예제 값이 있다면 쉽게 디버그해서 무엇이 문제인지 확인을 해 볼 수 있을텐데 말이죠..

    if __name__ == '__main__':
        T = int(input())
    
        for t in range(T):
            s_raw = input()
            list_raw = s_raw.split(" ")
            s_ori = list_raw[0]
            prio_l = list(list_raw[1]) #priority left parenthesis list.
            prio_r = [] #priotiry right parenthesis.
            s_modi = []
    
            if ( len(s_ori) > 100 or len(prio_l) != 4 or len(s_ori)%2 == 1):
                pass
            else:
                #define right parenthesis.
                for i in range(4):
                    if(prio_l[i] == "("):
                        prio_r.append(")")
                    elif(prio_l[i] == "{"):
                        prio_r.append("}")
                    elif(prio_l[i] == "["):
                        prio_r.append("]")
                    else:
                        prio_r.append(">")
    
                s_corr = [""] * len(s_ori) #corrected full string
                c_pop = 0 #used for multiple brackets            
    
                for i in range(len(s_ori)):
                    if(len(s_modi) == 0): #if the list is empty, add one item into s_corrected and s_modify
                        s_corr[i] = s_ori[i]
                        s_modi.append(s_ori[i])
                        c_pop = 0
                    else: 
                        #if right parenthesis is found...
                        if(s_ori[i] == ")"):
                            if(s_modi[-1] == "("):
                                s_corr[i] = ")"
                            else:
                                #priority.
                                if(prio_l.index(s_modi[-1]) < prio_l.index("(")): #current item has less priority
                                    s_corr[i] = prio_r[prio_l.index(s_modi[-1])]
                                else: #high priority, then change old left bracket and add right bracket also
                                    s_corr[i-c_pop*2-1] = "("
                                    s_corr[i] = ")"
                            s_modi.pop()    
                            c_pop += 1        
                        elif(s_ori[i] == "}"):
                            if(s_modi[-1] == "{"):
                                s_corr[i] = "}"
                            else:
                                #priority.
                                if(prio_l.index(s_modi[-1]) < prio_l.index("{")):
                                    s_corr[i] = prio_r[prio_l.index(s_modi[-1])]
                                else:
                                    s_corr[i-c_pop*2-1] = "{"
                                    s_corr[i] = "}"
                            s_modi.pop()    
                            c_pop += 1
                        elif(s_ori[i] == "]"):
                            if(s_modi[-1] == "["):
                                s_corr[i] = "]"
                            else:
                                #priority.
                                if(prio_l.index(s_modi[-1]) < prio_l.index("[")):
                                    s_corr[i] = prio_r[prio_l.index(s_modi[-1])]
                                else:
                                    s_corr[i-c_pop*2-1] = "["
                                    s_corr[i] = "]"
                            s_modi.pop()    
                            c_pop += 1
                        elif(s_ori[i] == ">"):
                            if(s_modi[-1] == "<"):
                                s_corr[i] = ">"
                            else:
                                #priority.
                                if(prio_l.index(s_modi[-1]) < prio_l.index("<")):
                                    s_corr[i] = prio_r[prio_l.index(s_modi[-1])]
                                else:
                                    s_corr[i-c_pop*2-1] = "<"
                                    s_corr[i] = ">"
                            s_modi.pop()    
                            c_pop += 1
                        #otherwise just add more into s_corr and s_modi.
                        else:
                            s_corr[i] = s_ori[i]
                            s_modi.append(s_ori[i])                    
    
                print(''.join(s_corr))
    

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