괄호 변환

developsy·2022년 7월 12일
0

이코테에서는 dfs/bfs라고 소개된 문제였는데 그다지 별 상관은 없어보였다. 헷갈리지 않고 구현하는게 핵심이었다. 푸는덴 한 30분 조금 더 걸린 듯..

#p346
def solution(p):
    
    if p == '':
        return p
    
    def equil(p): #균형 문자열
        left = 0
        right = 0
        for i in p:
            if i == ')':
                right += 1
            else:
                left += 1
        if left == right:
            return True
        return False
    
    def correct(p): #올바른 문자열
        stack = []
        for i in p:
            if i == '(':
                stack.append(i)
            else:
                if len(stack) == 0:
                    return False
                else:
                    stack.pop(-1)
        return True
    
    u = ''
    v = ''
    for i in range(1, len(p)+1): #u, v로 분리
        if equil(p[:i]):
            u = p[:i]
            v = p[i:]
            break
            
    #u가 올바른 문자열일 경우
    if correct(u):
        v = solution(v)
        answer = u + v
        return answer
    
    #u가 올바른 문자열이 아닐 경우
    else:
        answer = ''
        
        answer += '('
        answer += solution(v)
        answer += ')'
        u_temp = ''
        for i in u[1:-1]:
            if i == '(':
                u_temp += ')'
            else:
                u_temp += '('
        answer += u_temp
        return answer
solution("()))((()")

그런데 다른 사람의 풀이를 봐보니 u가 문자열이 아닌 경우에 괄호를 변환하는 부분이나 올바른/균형 문자열을 어이가 없을 정도로 간결하게 작성한 것도 있었다. 아직 난 한참 부족한 것 같다. 아직 문제를 제대로 추상화시키지 못하고 있는 듯하다.

profile
공부 정리용 블로그

0개의 댓글