[PRO] 괄호 변환

천호영·2022년 7월 29일
0

알고리즘

목록 보기
42/100
post-thumbnail

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

올바른 괄호를 체크하는건 푼 경험이 있어서 금방 작성할 수 있었고,
문제에서 하라는대로 코드를 작성하면 풀렸다. 재귀여서 복잡할 수 있는데 친절하게 알려줘서 큰 혼란은 없었다.

def convert_p(p): # 괄호 방향 뒤집기
    temp_str = ""
    for one_p in p:
        if one_p=="(":
            temp_str += ")"
        else:
            temp_str += "("
    return temp_str

def check_correct_par(p): # 올바른 괄호 문자열인지 확인
    cnt = 0
    for i in range(len(p)):
        if p[i]=="(":
            cnt+=1
        else:
            cnt-=1
            
        if cnt < 0:
            return False
    return cnt == 0

def correct(p):
    if not p: # 1단계
        return ""
    idx = 0
    cnt = 0
    for i in range(len(p)):
        if p[i]=="(":
            cnt+=1
        else:
            cnt-=1
        if cnt == 0:
            idx = i
            break
    
    u, v = p[:idx+1], p[idx+1:] # 2단계
    if check_correct_par(u): # 3단계
        return u + correct(v)
    else:
        now_str = "(" # 4-1단계
        now_str += correct(v) # 4-2단계
        now_str += ")" # 4-3단계
        now_str += convert_p(u[1:-1]) # 4-4단계
        return now_str # 4-5단계
        
            
        
def solution(p):
    return correct(p)

check_correct_par에서 cnt==0 안해주고 True 반환해도 될 듯(균형잡힌게 들어온다는 전제가 있으므로)

profile
성장!

0개의 댓글