사용 언어: python 3.9.5
https://programmers.co.kr/learn/courses/30/lessons/60058
level 2
그냥 하라는 대로 하면 된다.
def balance(p):
# 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다.
if p == "":
return ""
# 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다.
idx = 0
count = 0
if p[idx] == '(':
count += 1
else:
count -= 1
idx += 1
# 올바른 괄호 문자열인지
# 실수: )(인 경우
correct = True if count > 0 else False
while count != 0:
if p[idx] == '(':
count += 1
else:
count -= 1
if count < 0:
correct = False
idx += 1
# idx는 v의 시작 인덱스가 된다.
u = p[:idx]
if correct:
return u+balance(p[idx:])
else:
tmp = "("
tmp += balance(p[idx:])
tmp += ")"
u = u[1:-1]
for i in u:
if i == "(":
tmp += ")"
else:
tmp += "("
return tmp
def solution(p):
if p == "":
return ""
return balance(p)
성공
34분 30초
while문의 예외상황에 대해 처리하지 못했다.
결론: 처음 3개 값, 마지막 3개값에 대한 예외상황은 항상 주의깊게 살피자.
처음에 구현하는 문제인 것을 깨닫고, 구현 뒷 부분을 안 읽고 바로 구현에 들어갔다.
나중에 구현 뒷 부분을 읽어보니 재귀로 풀어야 하는 문제였다.
일반함수로 생각하고 있다가 갑자기 재귀로 바꾸려니 힘들었다.
결론: 문제는 알 것 같아도 다 읽고 풀자.
https://programmers.co.kr/learn/courses/30/lessons/60058/solution_groups?language=python3
람다를 써서 괄호 처리를 간단히 할 수 있다.
하나하나마다 간단한 함수를 적용시켜야 한다면 람다로 사용할 수 있음을 유념해두자.