파이썬 알고리즘 252번 | [프로그래머스 괄호 변환 ]

Yunny.Log ·2022년 8월 24일
0

Algorithm

목록 보기
257/318
post-thumbnail

252. 2020 KAKAO BLIND RECRUITMENT 괄호 변환

1) 어떤 전략(알고리즘)으로 해결?

  • 그저 구현

2) 코딩 설명

  • 그저..하라는 대로 하면 된드아 !

<내 풀이>



# "균형잡힌 괄호 문자열" p가 매개변수

def solution(p):
    
    def is_it_right(target) :
        target = list(target)
        stack = [ ]
        for t in target :
            if t=='(' :
                stack.append(t)
            else  : 
                if stack : 
                    stack.pop()
                else : 
                    return False
        if len(stack) > 0 :
            return False
        else : 
            return True

    def divide_u(p) : # u의 인덱스 
        lt = 1 # p의 맨 첫번째 인덱스
        rt = 0
        idx = 1
        while not lt==rt : 
            if p[0]==p[idx] :
                lt+=1
            else : 
                rt+=1
            idx+=1
        return idx-1

    if is_it_right(p) :
        return p

    # u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, 
    # v는 빈 문자열이 될 수 있습니다.   
    answer = ''
    p = list(p)

    if len(p)==0 : 
        return answer
    
    else : 
        uidx = divide_u(p)
        u = "".join(p[:uidx+1])
        v = "".join(p[uidx+1:])
        
        if not is_it_right(u) :
            start = '('
            start+=solution(v)
            start+=')'
            u=list(u)
            u = u[1:len(u)-1]
            newu = ''
            for uu in u :
                if uu=='(' :
                    newu+=(')')
                else : 
                    newu+=('(')
                    
            newu = "".join(newu)
            start+="".join(newu)
            return start
        else : 
            return u+solution(v)

# print(solution("(()())()"))
# print(solution(")("))
print(solution("()))((()"))

<반성 점>

  • 처음에 문자열 뒤집어진다는게 순서 뒤집어지는 것이라구 오해함 꺄르르

0개의 댓글