CS/algorithm & data structure

[프로그래머스] 괄호변환 (파이썬 풀이)

hjkim0502 2022. 6. 25. 21:00

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

 

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

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

programmers.co.kr

* 해결 못 함

# 문자열 p를 u, v로 분리하는 함수
def divide(p):
    open = 0
    close = 0

    for i in range(len(p)):
        if p[i] == '(':
            open += 1
        else:
            close += 1
        if open == close:
            return p[:i + 1], p[i + 1:]


# 문자열 u가 올바른 괄호 문자열인지 확인하는 함수
def check(u):
    stack = []

    for p in u:
        if p == '(':
            stack.append(p)
        else:
            if not stack:
                return False
            stack.pop()

    return True

# 올바른 괄호 문자열 변환 프로그램
def solution(p):
    if not p:
        return ""

    u, v = divide(p)

    if check(u):
        return u + solution(v)
    else:
        answer = '(' + solution(v) + ')'

        for p in u[1:len(u) - 1]:
            if p == '(':
                answer += ')'
            else:
                answer += '('

        return answer
  • 아이디어: 문자열을 u, v로 나누는 함수와 문자열이 올바른 괄호 형태인지 판단하는 함수 생성 후 문제의 알고리즘대로 풀이
  • u, v로 나누는 알고리즘을 생각해내지 못함, 순차 탐색하면서 최초로 균형잡힌 모습이 되면 그 지점까지 리턴