문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/60058
문제 설명은 하나 빼고 다 잘 쓰여져 있다.
4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.
이 설명때문에 좀 오래걸렸다...
문자 순서를 바꾸는 것이 아니라 각 괄호 하나하나 방향을 바꾸는 것이다.
def solution(s: str):
return changeBracket(s)
def changeBracket(s: str):
if s == "":
return ""
u, v = "", ""
for i in range(2, len(s) + 1, 2):
if isBalance(s[:i]):
u, v = s[:i], s[i:]
break
if isRight(u):
v = changeBracket(v)
return u + v
else:
blank = "(" + changeBracket(v) + ")"
reverseU = "".join(map(lambda x: ")" if x == "(" else "(", u[1:len(u) - 1]))
return blank + reverseU
def isBalance(s: str):
return s.count("(") == s.count(")")
def isRight(s: str):
rightBracket = "()"
closeBracket = ")"
ls = list(s)
stack = []
while ls:
bracket = ls.pop(0)
if bracket == closeBracket:
if stack == []:
return False
else:
if (stack.pop() + bracket) != rightBracket:
return False
else:
stack.append(bracket)
return stack == []