문제:
풀이방법:
진행되는 단계를 보면 재귀적으로 수행한다고 했으므로 재귀로 구성하는 것이 맞다.
전체적인 진행은 make라는 함수에서 된다.
1, 2는 split()이라는 함수에서 진행된다. 2는 균형잡힌 문자열으로만 분리하면 되므로 ( 면 +1을 ) 면- 1을 해서 균형잡힌 문자열으로 분리를 한다.
이렇게 분리를 한 뒤에 u가 올바른 괄호 문자열인지 확인해야 한다.(3) 이 작업은 check라는 함수에서 진행된다. split과 비슷하게 작동을 하지만 count가 음수로 내려간다면 올바른 괄호 문자열이 아니기 때문에 이 경우에 False를 반환하고 나머지는 True를 반환하도록 한다. 그리고 이를 문자열에 붙이고 v에 대해서 1을 다시 진행하도록 make(v)를 수행한다.만약 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
|
def split(p):
if p=='':
return ''
else:
count=0
for i,k in enumerate(p):
if k==')':
count-=1
else:
count+=1
if count==0:
break
return p[:i+1],p[i+1:]
def check(u):
count=0
for i in u:
if i=='(':
count+=1
else:
count-=1
if count < 0:
return False
return True
def make(p):
try:
u,v=split(p)
except:
return ''
answer=''
if check(u):
answer+=u
answer+=make(v)
return answer
else:
answer+='('
answer+=make(v)
answer+=')'
u=u[1:-1]
for i in u:
if i=='(':
answer+=')'
else:
answer+='('
return answer
def solution(p):
answer=make(p)
return answer
|
cs |
문제링크:
https://programmers.co.kr/learn/courses/30/lessons/60058
'Algorithm > Python' 카테고리의 다른 글
[Programmers]2018 Kakao.압축 (0) | 2019.12.02 |
---|---|
[Programmers]2018 Kakao.방금그곡 (0) | 2019.12.01 |
[Programmers]2020 Kakao. 문자열 압축 (0) | 2019.11.14 |
[BOJ]2358. 평행선 (0) | 2019.11.13 |
[BOJ]GIT- 정리 (0) | 2019.11.12 |