안녕하세요 :)
https://programmers.co.kr/learn/courses/30/lessons/60058
저번글에 올바른 괄호 문제를 풀었죠 ? 거기서 작성했던 풀이를 is_perfect 함수로 작성했습니다.
그 함수를 이용해서 2020 KAKAO BLIND RECRUITMENT 괄호 변환 문제를 풀 수 있습니다!
문제에 조건들이 4가지가 있기 때문에 solution 함수에서 어떤 것을 할지 대략적으로 작성해본 후 그 4가지에 대해 필요한 코드와 함수를 만들면 쉽게 풀 수 있습니다.
def is_perfect(s):
cnt = 0
for ch in s:
if ch == "(":
cnt += 1
elif ch == ")":
cnt -= 1
if cnt < 0:
break
if cnt == 0:
return True
else:
return False
def divide(p):
cnt = 0
u, v = "", ""
for i in range(len(p)):
if p[i] == "(":
cnt += 1
elif p[i] == ")":
cnt -= 1
if cnt == 0:
u = p[:i+1]
v = p[i+1:]
break
return u, v
def reverse_ch(s):
s = list(s)
for i in range(len(s)):
if s[i] == "(":
s[i] = ")"
elif s[i] == ")":
s[i] = "("
return ''.join(s)
def solution(p):
# 1. 빈 문자열
if len(p) == 0:
return ""
# 2. divide(u, v)
u, v = divide(p)
# 3.u가 올바른 괄호 문자열이면
if is_perfect(u):
return u + solution(v)
else: # 4.u가 올바른 괄호 문자열이 아니라면
s = "(" + solution(v) + ")"
u = reverse_ch(u[1:-1])
return s + u