[프로그래머스 level2] 괄호 변환 Python

IT공부중·2020년 4월 9일
0

알고리즘

목록 보기
12/49

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

def checkBracket(text): #균형잡혔을 때, 올바른지 체크,
    openBracket = 0
    closeBracket = 0
    for bracket in text:
        if bracket == '(':
            openBracket += 1
        else:
            closeBracket += 1
        if openBracket < closeBracket:
            return False
    
    return True

def divideBracket(p):
    if p == '':
        return '' 
    openBracket = 0
    closeBracket = 0
    lastBracket = ''

    for index in range(len(p)):
        if p[index] == '(':
            openBracket += 1
        else:
            closeBracket += 1
        lastBracket = p[index]
        if openBracket == closeBracket:
            if lastBracket == ')': # 수가 같은데 닫혔으면 올바르다.
                # u가 올바르면 # 뒤에도 똑같이 진행하면 된다. 그 값을 더해서 반환
                return p[:index+1] + divideBracket(p[index+1 :])
            else: # 안 올바르다 균형은 잡혔다.
                # 앞에꺼 올바르게 고치기 -> 뒤에꺼 나누기
                return reverse(p[:index+1], divideBracket(p[index+1 :]))

def reverse(u, v) : # 앞 뒤 뒤집어서 v 붙여서 더함. v도 다 마친 상태.
    empty = '('
    empty += v + ')'
    for i in range(1, len(u)-1):
        if u[i] == '(':
            empty += ')'
        else:
            empty += '('
    return empty

def solution(p):
    if checkBracket(p):
        return p
    
    return divideBracket(p)

문제 이해가 어려워서 다른 분이 문제를 설명해놓은 것을 보고 풀었다. 알고나니 나름 간단했다..?
각각 함수로 만들어서 재귀적으로 풀었다. 올바른지 확인하고, 균형은 잡혀있는지 확인하고, 차례대로 해주었따..

reference

https://medium.com/@dltkddud4403/2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EB%B8%94%EB%9D%BC%EC%9D%B8%EB%93%9C-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B4%84%ED%98%B8-37ad7be7acd6

profile
4년차 프론트엔드 개발자 문건우입니다.

0개의 댓글