이 문제는 DFS나 BFS를 사용하기 보단
구현, 재귀함수와 가까운 듯 하다.
코드내에 간단한 조건들과 구현을 정리해보았다.
코드
# 올바른 문자열인지 확인해주는 함수
def test1(array):
count = 0
for i in array:
if i == "(":
count += 1
else:
count -= 1
if count < 0:
return False
return True
# 메인 함수
def solution(array):
# 길이가 0이면 그대로 반환
if len(array) == 0:
return ""
# 해당 문자열이 균형잡혔는지 확인
count1,count2 = 0, 0
for i in range(len(array)):
if array[i] == "(":
count1 += 1
else:
count2 += 1
if count1 == count2:
u = array[0:i+1]
# 규형이 잡혔지만 u를 제외한 v가 더이상 없는 경우
if i+1 >= len(array):
v = ""
break
v = array[i+1:]
break
# u가 올바른 문자열이면 v처리
if test1(u):
v = solution(v)
# u가 올바르지 않다면 조건에 맞추어 처리
else:
mid = ""
for i in range(1, len(u)-1):
if u[i] == "(":
mid += ")"
else:
mid += "("
result = "(" + solution(v) + ")" + mid
return result
return u+v
array = "()))((()"
print(solution(array))
재귀함수를 얼마나 잘읽는지 중요한 문제인듯 싶다.
헷갈릴때는 재귀함수가 많이 호출되는 예시를 사용해 일련의 과정을 따라가는 방식도 괜찮은 것 같다.
'Algorithm > DFS and BFS' 카테고리의 다른 글
인구 이동 (0) | 2023.04.14 |
---|---|
감시 피하기 (0) | 2023.04.13 |
경쟁적 전염 (0) | 2023.04.10 |
연구소 (0) | 2023.04.10 |
특정 거리의 도시 찾기 (0) | 2023.04.10 |