본문 바로가기

알고리즘 공부

[2020 KAKAO BLIND RECRUITMENT] 괄호 변환 | Python3

문제 설명에 제시된 과정대로 문제를 해결하였습니다. 

테스트 12부터 틀리시는 분들은 다음 조건이 문자열을 역순하는 것이 아닌 '(' -> ')' , ')' -> ')' 괄호의 방향을 바꿔야하는 조건임을

유의해주세요 !

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
def solution(p:str)->str:
    if not p: return p
    u,v = split(p)
    if is_proper(u): return u + solution(v)
    elsereturn '(' + solution(v) + ')' + reverse(u)
 
# u,v로 나누는 함수
def split(string:str)->str:
    count=0
    for i,s in enumerate(string):
        count+= 1 if s=='(' else -1
        if count==0: break
    return string[:i+1], string[i+1:]
 
# 올바른 괄호 문자열인지 확인 함수
def is_proper(string:str)->bool:
    stack=[]
    for s in string:
        if s=='(': stack.append(s)
        elif not stack: return False
        else: stack.pop()
    return not stack
 
# 문제 4-4 조건 실행하는 함수
def reverse(string:str)->str:
    return ''.join([ '(' if s==')' else ')' for s in string[1:-1]])