문제
접근
함수를 하나만들고 문제에서 주어지는 그대로 코드로 옮기면 된다.
문제가 조금 복잡해보여서 헷갈리지 않게 필요한 부분들을 모두 함수화시켰다.
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