👨🏻‍💻알고리즘/프로그래머스

[프로그래머스] Lv2. 괄호 변환

waveofmymind 2023. 2. 6. 23:14

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/60058

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드

from collections import deque
def sep(p):
    open_s,close_s = 0,0
    for i in range(len(p)):
        if p[i] == '(':
            open_s += 1
        if p[i] == ')':
            close_s += 1
        if open_s == close_s:
            u = p[:i+1]
            v = p[i+1:]
            return u,v
        
def check(u):
    stack = []
    for i in u:
        if i == '(':
            stack.append(i)
        else:
            if not stack:
                return False
            stack.pop()
    return True if not stack else False


def solution(p):
    if not p:
        return p
    u,v = sep(p)
    if check(u):
        return u + solution(v)
    else:
        answer = '('
        answer += solution(v)
        answer += ')'
        for x in u[1:len(u)-1]:
            if x == '(':
                answer += ')'
            else:
                answer += '('
    return answer

풀이

  • u,v로 분리하는 로직과, 해당 문자열이 올바른 괄호쌍인지 판별하는 로직만 구현하면 쉽다.
  • 문제를 해결하는 로직이 길어지면 함수를 나누는게 확실히 좋은 방법인 것 같다.