본문 바로가기

이코테

[18번] 괄호 변환

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

 

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

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

programmers.co.kr

 

구현, 재귀 문제

 

# 균형잡힌 문자열의 인덱스
def balanced_index(p):
    cnt = 0
    for i in range(len(p)):
        if p[i] == '(':
            cnt += 1
        else:
            cnt -= 1
        if cnt == 0:
            return i + 1


# 올바른 문자열 여부
def is_proper(p):
    cnt = 0
    for ch in p:
        if ch == '(':
            cnt += 1
        else:
            cnt -= 1
        if cnt < 0:
            return False
    return True


def solution(p):
    rst = ""
    if p == '':
        return rst

    idx = balanced_index(p)
    u = p[:idx]
    v = p[idx:]

    if is_proper(u):
        return u + solution(v)
    else:
        rst += '('
        rst += solution(v)
        rst += ')'
        tmp = list(u[1:-1])
        for i in range(len(tmp)):
            if tmp[i] == '(':
                tmp[i] = ')'
            else:
                tmp[i] = '('
        rst += "".join(tmp)
        return rst


print(solution("()))((()"))  # ()(())()

'이코테' 카테고리의 다른 글

[19번] 연산자 끼워 넣기  (0) 2021.05.04
[17번] 경쟁적 전염  (0) 2021.05.03
[16번] 연구소  (0) 2021.05.03
[15번] 특정거리의 도시 찾기  (0) 2021.05.03