'균형잡힌 괄호 문자열' p가 주어질 때, '올바른 괄호 문자열'로 변환한 결과를 반환한다.
'균형잡힌 괄호 문자열'은 '('와 ')'의 개수가 같은 문자열이다.
'올바른 괄호 문자열'은 '균형잡힌 괄호 문자열'이면서 '('와 ')' 짝이 모두 맞는 문자열이다.
💻Solution
def bracket_check(s):
cnt = 0
for char in s:
if cnt < 0:
return False
cnt += 1 if char == '(' else -1
if cnt != 0:
return False
return True
def bracket(p):
# 1. 입력이 빈 문자열인 경우
if p == '':
return ''
# 2. 문자열을 균형잡힌 괄호 문자열 u, v로 분리
left_right_cnt = 0
idx = 0
for i in range(len(p)):
left_right_cnt += 1 if p[i] == '(' else -1
if left_right_cnt == 0:
idx = i
break
u, v = p[:i+1], p[i+1:]
# 3. u가 올바른 괄호 문자열인 경우
if bracket_check(u) is True:
return u + bracket(v)
# 4. u가 올바른 괄호 문자열이 아닐 경우
tmp = '(' + bracket(v) + ')'
if u:
for char in u[1:-1]:
tmp += '(' if char == ')' else ')'
return tmp
def solution(p):
return bracket(p)
🗝️keypoint
주어진 알고리즘을 순서대로 빠짐없이 그대로 구현하는것이 중요하다.
괄호가 한 종류일 경우, '올바른 괄호 문자열'은 별도의 list 없이 int로 확인할 수 있다.
4-4의 '나머지 문자열의 괄호 방향을 뒤집어서'는 문자열의 순서를 뒤집는게 아니라 각 괄호의 방향만 뒤집는 것이다.