동캄의 코딩도장

프로그래머스 level2 [괄호 변환] 파이썬 본문

코테/프로그래머스

프로그래머스 level2 [괄호 변환] 파이썬

동 캄 2021. 12. 18. 19:41

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

 

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

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

programmers.co.kr

#프로그래머스 괄호 변환
def isright(s):
        lst=[]
        for i in range(len(s)):
            if len(lst)>=1:
                if lst[-1]=='(' and s[i]==')':
                    lst.pop()
                else:
                    lst.append(s[i])
            else:
                lst.append(s[i])
        if lst:
            return False
        else:
            return True
def decision(s):
    ans=''
    if not s:
        return ans
    else:
        if isright(s):
            return s
        else:
            l=0
            r=0
            for i in range(len(s)):
                if s[i]=='(':
                    l+=1
                else:
                    r+=1
                if l==r:
                    break
            u=s[:i+1]
            v=s[i+1:]
            if isright(u):
                return ans+u+decision(v)
            else:
                u_=''
                for i in range(1,len(u)-1):
                    if u[i]=='(':
                        u_+=')'
                    else:
                        u_+='('
                return ans+'('+decision(v)+')'+u_
def solution(p):
    answer = ''
    answer=decision(p)
    return answer

isright함수: stack을 이용하여 문자열이 올바른 괄호 문자열인지 판별

decision함수: 문자열의 종류를 결정하고, 올바른 괄호 문자열이 아니면, u와 v로 문자열을 나누고 decision을 재귀로 반복하며, answer을 return

 

#프로그래머스 괄호 변환 다른사람풀이

def solution(p):
    if p=='': return p
    r=True; c=0
    for i in range(len(p)):
        if p[i]=='(': c-=1
        else: c+=1
        if c>0: r=False
        if c==0:
            if r:
                return p[:i+1]+solution(p[i+1:])
            else:
                return '('+solution(p[i+1:])+')'+''.join(list(map(lambda x:'(' if x==')' else ')',p[1:i]) ))

다른 분 풀이인데 정말 미쳤다...