Algorithm

[Algorithm] python 괄호 변환 (kakao 2020 프로그래머스)

반응형

※답을 찾으시는 분은 맨 밑을 보시면 됩니다.

 

 

 

 

 

문제설명


 

 

 

내 풀이식


시간제한 : 60:00

사용 시간 : 60:00 

정답 유무 : 틀림

def solution(p):
    answer = ''
    while 1:
        count_l = 0
        count_r = 0
        for i in range(0, len(p)):
            if i == 0:
                if p[i]=='(':
                    count_l += 1
                else:
                    count_r += 1
            else:
                if count_l != count_r:
                    if p[i] == '(':
                        count_l += 1
                    else:
                        count_r += 1
                else:
                    a = p[:i]
                    b = p[i:]
                    break
        else:
            a = p[:i+1]
            b = p[i+1:]
        if a == '()':
            answer += a
            a = ''
            p = b
        elif b == '()':
            c = a[-3:-1]
            answer += '(' + a[::-1][1:3] + ')' + b
            break
        else:
            p = b

    return answer


p = ")("
print(solution(p))

 

오답노트 :

1. 함수를 여러개 만들 생각을 못했다.

2. 재귀 함수에 대한 개념 부족

3.문제 설명을 그대로 따라가면서 하나씩 구현해보자.

 

 

다른 분의 풀이식


이 분 소스코드가 너무 깔끔하고 보기 쉽게 되어 있고 잘 짜여있다고 생각이 들어서 가져오게 되었다. 앞으로 코드를 이런식으로 짜야겠다. 밑에 출처를 남긴다. 

# 문자열 w를 u, v로 분리하는 함수
def divide(w):
    openP = 0
    closeP = 0
    
    for i in range(len(w)):
        if w[i] == '(':
            openP += 1
        else:
            closeP += 1
        if openP == closeP:
            return w[:i + 1], w[i + 1:]
 
 
# 문자열 u가 올바른 괄호 문자열인지 확인하는 함수
def isBalanced(u):
    stack = []
    
    for p in u:
        if p == '(':
            stack.append(p)
        else:
            if not stack:
                return False
            stack.pop()
            
    return True
 
 
def solution(w):
    # 과정 1
    if not w:
        return ""
    
    # 과정 2
    u, v = divide(w)
    
    # 과정 3
    if isBalanced(u):
        # 과정 3-1
        return u + solution(v)
    # 과정 4
    else:
        # 과정 4-1
        answer = '('
        # 과정 4-2
        answer += solution(v)
        # 과정 4-3
        answer += ')'
        
        # 과정 4-4
        for p in u[1:len(u) - 1]:
            if p == '(':
                answer += ')'
            else:
                answer += '('
        
        # 과정 4-5
        return answer

 

 

출처:

hellominchan.tistory.com/352

반응형