본문 바로가기

Algorithm

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

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

 

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

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

programmers.co.kr

생각

1. 올바른 괄호 문자열인지를 우선적으로 체크합니다.

2. 올바른 괄호 문자열이 아니면 재귀적인 처리를 모두 수행하는 solve 함수를 호출합니다.

3. solve 함수에서 균형잡힌 괄호 문자열 u,v로 분리합니다.

4. u가 올바른 괄호 문자열이면 v에 대해 다시 solve 함수를 호출합니다. -> u + solve(v)

5. u가 올바른 괄호 문자열이 아니라면 문제의 4-1 ~ 4-5 를 모두 수행합니다.

Python Code

def divide(p):
    u,v = '',''
    open, close = 0,0
    for i,c in enumerate(p):
        if c == '(': 
            open += 1
        if c == ')':
            close += 1
        if open == close:
            u = p[:i+1]
            v = p[i+1:]
            break
    return u,v

def reverse(u):
    ret = ''
    for c in u:
        if c =='(' : ret += ')'
        if c == ')' : ret += '('
    return ret

def solve(s):
    if s == '': 
        return ''

    u,v = divide(s)
    if isCorrect(u):
        return u + solve(v)
    else: #4번 과정
        return '(' + solve(v) + ')' + reverse(u[1:-1])

def isCorrect(u):
    stack = []
    for c in u:
        if c == '(':
            stack.append(c)
        elif stack :
            stack.pop()
    return not stack

def solution(p):
    answer = ''
    # 올바른 괄호인지 확인
    if isCorrect(p):
        answer = p
    else:
        answer = solve(p)
    # print(answer)    
    return answer