본문 바로가기
코딩테스트

괄호변환 Python 정리 및 분석 (프로그래머스, 카카오 기출)

by ech97 2022. 7. 29.
괄호변환

괄호변환

프로그래머스: https://school.programmers.co.kr/learn/courses/30/lessons/60058

Edge case

1. 재귀

  • 종료조건 확인

Code

문제의 안내대로 진행

# 괄호변환
# https://school.programmers.co.kr/learn/courses/30/lessons/60058
# 15:15 ~ 16:30
# @@ 재귀는 종료조건이 꼭 있어야함

def check(s):
    # 올바른 괄호 문자열인지 체크
    lcnt = 0
    rcnt = 0
    for i in range(len(s)):
        if s[i] == '(':
            lcnt += 1
        else:
            rcnt += 1
        if rcnt > lcnt:
            return False
    return True

def divide(s):
    lcnt = 0
    rcnt = 0
    for i in range(len(s)):
        if s[i] == '(':
            lcnt += 1
        else:
            rcnt += 1
        if lcnt==rcnt:
            return s[ : i+1], s[i+1 : ]
    return '', ''

def flip(s):
    result = ""
    for i in range(len(s)):
        if s[i] == '(':
            result += ')'
        elif s[i] == ')':
            result += '('
    return result

def process(s):
    result = ""
    if not s:
        return result
    u, v = divide(s)
    if check(u):
        result += u # u 기록해놓기
        result += process(v)  # v 분리 재귀적 실행
        return result
    else:
        result = '('
        result += process(v)
        result += ')'
        result += flip(u[1:-1])
        return result
        


def solution(p):
    return process(p)

 

반응형

댓글