프로그래머스 괄호 변환

Weirdo·2022년 11월 18일
0

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

# 221119
def finduv(p):
    for i in range(len(p)):
        if p[:i+1].count('(') == p[:i+1].count(')'):
            return p[:i+1], p[i+1:]
    return '', ''

def isRight(u):
    if u[0] == ')':
        return False
    
    cnt = 0
    for x in u:
        if x == '(':
            cnt += 1
        elif x == ')':
            cnt -= 1
    return True if cnt == 0 else False

def change(u):
    res = ''
    for x in u[1:-1]:
        res += ')' if x == '(' else '('
    return res
            

def solution(p):
    if p == '':
        return ''
    u, v = finduv(p)
    if isRight(u):
        return u + solution(v)
    else:
        return '(' + solution(v) + ')' + change(u)

    return ''
# 예전 풀이
def solution(p):
    answer = ''
    if p == '':
        return ''
    if chk(p):
        return p
    u, v = chk_uv(p)
    if chk(u) == True:
        answer = u + solution(v)
    else:
        answer = '('+ solution(v) + ')' + change(u)
        
    return answer

def chk_uv(p):
    cnt = 0
    u = ''
    v = p
    for i in p:
        if i == '(':
            cnt = cnt + 1
        elif i == ')':
            cnt = cnt - 1
        u += i
        v = v[1:]
        if cnt == 0:
            print(u, v)
            return u, v
    
def change(u):
    ans = ''
    for x in u[1:-1]:
        if x == '(':
            ans += ')'
        elif x == ')':
            ans += '('
    return ans

def chk(p): #올바른 문자열 체크
    cnt = 0
    for i in p:
        if i == '(':
            cnt = cnt + 1
        elif i == ')':
            cnt = cnt - 1
        if cnt < 0:
            return False
    return True
profile
Yeah, weirdos change the world

0개의 댓글