Posts [알고리즘] 프로그래머스 - 괄호 변환
Post
Cancel

[알고리즘] 프로그래머스 - 괄호 변환


문제

괄호 변환


접근

함수를 하나만들고 문제에서 주어지는 그대로 코드로 옮기면 된다.
문제가 조금 복잡해보여서 헷갈리지 않게 필요한 부분들을 모두 함수화시켰다.
converse가 재귀를 담당하는 메인 함수,
balenceStr은 문제에서 2번 균형잡힌 괄호 문자열 u, v로 분리하는 함수,
isRightStr은 문제에서 3,4번의 기준인 u가 올바른 괄호 문자열인지 판단하는 함수,
reverseStr은 문제에서 4-4번 u의 괄호 방향을 바꾸는 함수이다.

코드

  • 파이썬 코드
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
def solution(p):
    answer = converse(p)
    return answer

def converse(p):
    if len(p) == 0:
        return ''
    u, v = balenceStr(p)
    if isRightStr(u):
        return u + converse(v)
    else:
        tmp = '(' + converse(v) + ')'
        u = reverseStr(u[1:-1])
        tmp += u
        return tmp

def balenceStr(p):
    left = 0
    right = 0
    u = ''
    v = ''
    for i in range(len(p)):
        if p[i] == '(':
            left+=1
            u+=p[i]
        else:
            right+=1
            u+=p[i]
        if left == right:
            v = p[i+1:]
            break
    return u, v

def isRightStr(p):
    stack = []
    isRight = True
    for item in p:
        if item == '(':
            stack.append(item)
        else:
            if len(stack) == 0:
                isRight = False
                break
            else:
                stack.pop(-1)
    return isRight
def reverseStr(p):
    ans = ''
    for item in p:
        if item == '(':
            ans += ')'
        else:
            ans += '('
    return ans


This post is licensed under CC BY 4.0 by the author.