띠리링구 2022. 3. 1. 10:26

코딩테스트 연습 - 괄호 변환 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

구현문제에 가깝다. 처음에 문제를 이해하는게 좀 거지같은데 이해 잘 하고 고대로 코드로 옮기기만 하면 쉽게 풀 수 있다.

 

def check_proper(string):
    count = 0
    
    for ch in string:
        if ch == '(':
            count += 1
        elif count == 0:
            return False
        else:
            count -= 1
    
    return True

def find_balanced(string):
    count = 0
    for i in range(len(string)):
        if string[i]=='(':
            count += 1
        else:
            count -= 1
            
        if count == 0:
            return i
    return len(string)-1

def solution(p):
    if not p:
        return p
    
    if check_proper(p):
        return p
    
    b_index = find_balanced(p)
    
    u = p[:b_index+1]
    v = p[b_index+1:]
    
    if check_proper(u):
        return u + solution(v)
    
    ans = '(' + solution(v) + ')'
    for i in range(1,len(u)-1):
        if u[i] == '(':
            ans += ')'
        else:
            ans += '('
    return ans