본문 바로가기
알고리즘

괄호변환 (구현, 재귀)

by dharana7723 2021. 6. 17.

상당히 쉬운 문제인데 처음에는 문제를 보고 지나치게 쫄기도 했고(?) 문제를 잘못 읽어서 어디가 틀린거지 하고 꽤 오래찾은 것 같습니다.

문제는 u 문자열을 뒤집는 부분에서 저는 reversed 인줄 잘못 알고 있었던 것이었습니다.

 

문제에서 말하는 대로 재귀형태를 만들어 구현하면 쉽게 풀 수 있습니다.

 

from collections import deque

def checkCorrect(s):
    count = 0
    for i in s:
        if i == '(':
            count+=1
        else:
            if count == 0:
                return False
            count-=1
    return True

#     st = deque()
    
#     for i in range(len(s)):
#         if s[i] == '(':
#             st.append(i)
#         else:
#             if len(st)>0:
#                 st.pop()
#             else:
#                 return False
#     if len(st)>0:
#         return False
#     else:
#         return True
    
    
def splitString(s):
    count = 0
    for i in range(len(s)):
        if s[i] == '(':
            count+=1
        else:
            count-=1
        if count == 0:
            return i
    # ct_left = 0
    # ct_right =0
    # for i in range(len(s)):
    #     if s[i] == "(":
    #         ct_left+=1
    #     else:
    #         ct_right+=1
    #     if ct_left == ct_right:
    #         return i
    

def reverseString(s):
    s = s[::-1]
    return s

def solution(p):
    answer = ''
    
    if p=='':
        return answer
    
#     a = checkCorrect(p)
#     if a:
#         return p
    
    idx = splitString(p)
    # print(idx)
    u , v = p[:idx+1], p[idx+1:]
    
    print("u",u)
    print("v",v)
    if checkCorrect(u):
        answer = u + solution(v)
    else:
        answer = "("
        answer += solution(v)
        answer += ")"
#         answer += reverseString(u[1:-1])
        u = list(u[1:-1])
        for i in range(len(u)):
            if u[i] == '(':
                u[i]=')'
            else:
                u[i] = '('
        t = ""
        for i in range(len(u)):
            t+=u[i]
        print(t)
        print(u)
        
        answer+= "".join(u)
    
    return answer

'알고리즘' 카테고리의 다른 글

연구소 (bfs/dfs)  (0) 2021.06.17
경쟁적 전염 (bfs , 우선순위큐)  (0) 2021.06.17
연산자 끼워넣기 (dfs/ combinations/permutations)  (0) 2021.06.17
인구이동 (bfs)  (0) 2021.06.17
특정거리의 도시 (bfs/dfs)  (0) 2021.06.14