파이썬 알고리즘 : 괄호 변환

카카오 코딩테스트

2024년 5월 7일 알고리즘 문제풀이

문제

난이도

Lv.2

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from collections import Counter

# 균형잡힌 괄후 문자열인지 확인하는 함수
def check_balance(k):
    arr = Counter(k)
    if arr['('] == arr[')']:
        return True
    return False

# 올바른 괄호 문자열인지 확인하는 함수
def check_right(k):
    while '()' in k:
        arr = list(k)
        for i in range(len(k)-1):
            if arr[i] == '(' and arr[i+1] == ')':
                arr[i] = arr[i+1] = ''
        k = ''.join(arr)
    if not len(k):
        return True
    return False

# 변환과정을 나타내는 함수
def process(x):
    # 1단계
    if not x:
        return x
    
    # 2단계
    for i in range(1,len(x)+1):
        tmp = x[:i]
        if check_balance(tmp):
            break
    u = tmp
    v = x[i:]
    
    # 3단계
    if check_right(u):
        # 3-1단계
        return u + process(v)
    # 4단계
    else:
        # 4-1, 4-2, 4-3단계
        new = '(' + process(v) + ')'
        arr = []
        # 4-4단계
        for i in range(1,len(u)-1):
            if u[i] == '(':
                arr.append(')')
            else:
                arr.append('(')
        new += ''.join(arr)
        # 4-5단계
        return new

def solution(p):
    answer = ''
    u = ''
    answer = process(p)
    return answer

카카오는 시키는대로 하면 된다.