본문 바로가기
알고리즘/프로그래머스

[Python] 괄호 변환

by 컴공맨 2021. 3. 21.
 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr


풀이

문제에서 주어진 조건대로 재귀함수를 작성하여 해결했습니다.


코드

def solution(p):
    answer = ''

    if is_proper(p):
        return p

    answer = go(p)
    return answer


def go(p):
    if p == "":
        return p

    u, v = split_bracket(p)
    # print(u, v)

    if is_proper(u):
        u += go(v)
        return u
    else:
        s = "("
        s += go(v)
        s += ")"
        if len(u) > 0:
            temp = revers_str(u[1:-1])
            s += temp
        return s


def revers_str(u):
    answer = ""

    for bracket in u:
        if bracket == "(":
            answer += ")"
        else:
            answer += "("

    return answer


def split_bracket(p):
    u, v = p, ""
    # 균형잡힌괄호는 최소 (, ) 하나씩 2개가 있어야하므로 2부터 시작
    for i in range(2, len(p)):
        temp = p[:i]
        if is_balance(p[:i]):
            u = p[:i]
            v = p[i:]
            break
    return u, v


def is_balance(p):
    return p.count("(") == p.count(")")


def is_proper(p):
    bracket_cnt = 0

    for bracket in p:
        if bracket == "(":
            bracket_cnt += 1
        else:
            bracket_cnt -= 1

        if bracket_cnt < 0:
            return False

    return True

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] 튜플  (0) 2021.03.27
[Python] 순위 검색  (0) 2021.03.21
[Python] 메뉴 리뉴얼  (0) 2021.03.15
[Python] 문자열 압축  (0) 2021.03.14
[Python] 다트 게임  (0) 2021.03.07