https://school.programmers.co.kr/learn/courses/30/lessons/60058
1. 빈 문자열일 때 그대로 반환한다.
2. '('와 ')'가 같은 개수만큼 있으면 잘라서 u, v로 분리한다. (균형잡힌 괄호 문자열)
3. u를 복사한 리스트(tmp)를 생성해서 '()'를 빈 문자열로 교체해준다.
4. u가 올바른 괄호 문자열(tmp == '')이면 v를 재귀적으로 수행한 후 u + 재귀결과 붙여서 반환한다.
5. u가 올바른 괄호 문자열이 아니면 v를 재귀적으로 수행한 후 '(' + 재귀결과 + ')' + u[1:-1] 거꾸로 붙여서 반환한다.
# 프로그래머스 60058: 괄호 변환 (2020 KAKAO BLIND RECRUITMENT)
def transfer(answer, p):
left, right = 0, 0
if p == '': # 빈 문자열 반환
return p
for i in range(len(p)):
if p[i] == '(':
left += 1
else:
right += 1
if left == right: # 두 균형잡힌 괄호 문자열 u, v로 분리
u = p[:i+1]
v = p[i+1:]
tmp = u[:]
while '()' in tmp:
tmp = tmp.replace('()', '')
if tmp == '': # 올바른 괄호 문자열일 때
answer += u + transfer(answer, v)
return answer
else: # 올바른 괄호 문자열이 아닐 때
tmp = '' # u의 첫 번째, 마지막 문자 제거 후 나머지 문자열의 괄호 방향을 뒤집어서 붙인다.
for j in u[1:-1]:
if j == '(':
tmp += ')'
else:
tmp += '('
answer += '(' + transfer(answer, v) + ')' + tmp
return answer
def solution(p):
answer = ''
return transfer(answer, p)
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | Lv3] 등굣길 (Python) (0) | 2023.03.22 |
---|---|
[프로그래머스 | Lv2] 문자열 압축 (Python) - 2020 KAKAO BLIND RECRUITMENT (0) | 2023.03.08 |
[프로그래머스 | Lv2] 수식 최대화 (Python) - 2020 카카오 인턴십 (0) | 2023.03.06 |
[프로그래머스 | Lv2] 순위 검색 (Python) - 2021 KAKAO BLIND RECRUITMENT (0) | 2023.03.05 |
[프로그래머스 | Lv2] 메뉴 리뉴얼 (Python) - 2021 KAKAO BLIND RECRUITMENT (0) | 2023.03.03 |