사용 언어: python 3.9.5
https://programmers.co.kr/learn/courses/30/lessons/60058
level 2
그냥 하라는 대로 하면 된다.
def balance(p):
    # 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 
    if p == "":
        return ""
    # 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 
    idx = 0
    count = 0
    if p[idx] == '(':
        count += 1
    else:
        count -= 1
    idx += 1
    # 올바른 괄호 문자열인지
    # 실수: )(인 경우 
    correct = True if count > 0 else False
    while count != 0:
        if p[idx] == '(':
            count += 1
        else:
            count -= 1
        if count < 0:
            correct = False
        idx += 1
    # idx는 v의 시작 인덱스가 된다.
    u = p[:idx]
    if correct:
        return u+balance(p[idx:])
    else:
        tmp = "("
        tmp += balance(p[idx:])
        tmp += ")"
        u = u[1:-1]
        for i in u:
            if i == "(":
                tmp += ")"
            else:
                tmp += "("
        return tmp
def solution(p):
    if p == "":
        return ""
    return balance(p)
성공
34분 30초
while문의 예외상황에 대해 처리하지 못했다.
결론: 처음 3개 값, 마지막 3개값에 대한 예외상황은 항상 주의깊게 살피자.
처음에 구현하는 문제인 것을 깨닫고, 구현 뒷 부분을 안 읽고 바로 구현에 들어갔다.
나중에 구현 뒷 부분을 읽어보니 재귀로 풀어야 하는 문제였다.
일반함수로 생각하고 있다가 갑자기 재귀로 바꾸려니 힘들었다.
결론: 문제는 알 것 같아도 다 읽고 풀자.
https://programmers.co.kr/learn/courses/30/lessons/60058/solution_groups?language=python3
람다를 써서 괄호 처리를 간단히 할 수 있다.
하나하나마다 간단한 함수를 적용시켜야 한다면 람다로 사용할 수 있음을 유념해두자.