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

 

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

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

programmers.co.kr

일단 지문부터 이해하기가 좀 어려웠다. 문제를 잘풀려면 일단 문제를 잘 이해해야한다

그래서 답지를 보고 풀었다

대부분은 이해가 갔는데 이해가 잘 가지 않는 부분이 있다. 

균형 괄호의 인덱스를 구할때는 if count==0: 문장이 바깥에 있는데

올바른 괄호를 check 할때는 왜 이게 else 문에 들어가 있는지 생각을 해봐야 겠다 

 

else:
            if count ==0:
                return False
            count-=1

 

-정답풀이

def balanced_index(p):
    count=0
    for i in range(len(p)):
        
        if p[i]=='(':
            count+=1
        else:
            count-=1
            
        if count ==0:
            return i
        
def check_proper(p):
    count=0 #왼쪽 괄호의 갯수
    for i in p:
        if i=='(':
            count+=1
        else:
            if count ==0:
                return False
            count-=1
    return True 
    

def solution(p):
    answer = ''
    if p =='':
        return answer
    index = balanced_index(p)
    u=p[:index+1]
    v=p[index+1:]
    #u가 올바른 괄호 문자열이면, v에 대해 함수를 수행한 결과를 붙여 반환
    if check_proper(u):
        answer = u+ solution(v)
    #u가 균형잡힌 괄호 문자열이면 아래의 과정을 수행 
    else:
        answer='('
        answer+=solution(v)
        answer+=')'
        
        u=list(u[1:-1])
        #괄호 뒤집기 
        for i in range(len(u)):
            if u[i]=='(':
                u[i]=')'
            else:
                u[i]='('
        answer += "".join(u)        
    return answer

+ Recent posts