카카오 2020 괄호변환

김준오·2021년 9월 4일
0

알고리즘

목록 보기
53/91
post-thumbnail

문제

https://programmers.co.kr/learn/courses/30/lessons/60058

재귀재귀한 재귀문제다
나머지 구현은 쉬웠지만
재귀를 적용하는게 좀 어려웠다

풀이

def solution(p):
    
    if p == '':
        return ''
    
    def change(w):
        u = ''
        v = ''
        a,b = 0,0
        for i in range(len(w)):
            if w[i] == '(':
                u += w[i]
                a += 1
                
            else :
                u += w[i]
                b += 1
                
            if a == b:
                v = w[i+1:]
                return (u,v)
            
        return (u,v)

    def check(u):
      stack = []
      for i in u:
        if i == '(':
          stack.append(1)
        
        else :
          if len(stack) == 0:
            return False
          stack.pop()

      return True
        
    def recursive(s):
      if s == '':
        return ''
      
      u,v = change(s)
      if check(u):
        return u+recursive(v)

      else :
        one = '(' + recursive(v) + ')'
        two = u[1:-1]
        for i in two:
            if i == '(':
                one += ')'
                
            else :
                one += '('
        return one

    return p if check(p) else recursive(p)
profile
jooooon

0개의 댓글

관련 채용 정보