상당히 쉬운 문제인데 처음에는 문제를 보고 지나치게 쫄기도 했고(?) 문제를 잘못 읽어서 어디가 틀린거지 하고 꽤 오래찾은 것 같습니다.
문제는 u 문자열을 뒤집는 부분에서 저는 reversed 인줄 잘못 알고 있었던 것이었습니다.
문제에서 말하는 대로 재귀형태를 만들어 구현하면 쉽게 풀 수 있습니다.
from collections import deque
def checkCorrect(s):
count = 0
for i in s:
if i == '(':
count+=1
else:
if count == 0:
return False
count-=1
return True
# st = deque()
# for i in range(len(s)):
# if s[i] == '(':
# st.append(i)
# else:
# if len(st)>0:
# st.pop()
# else:
# return False
# if len(st)>0:
# return False
# else:
# return True
def splitString(s):
count = 0
for i in range(len(s)):
if s[i] == '(':
count+=1
else:
count-=1
if count == 0:
return i
# ct_left = 0
# ct_right =0
# for i in range(len(s)):
# if s[i] == "(":
# ct_left+=1
# else:
# ct_right+=1
# if ct_left == ct_right:
# return i
def reverseString(s):
s = s[::-1]
return s
def solution(p):
answer = ''
if p=='':
return answer
# a = checkCorrect(p)
# if a:
# return p
idx = splitString(p)
# print(idx)
u , v = p[:idx+1], p[idx+1:]
print("u",u)
print("v",v)
if checkCorrect(u):
answer = u + solution(v)
else:
answer = "("
answer += solution(v)
answer += ")"
# answer += reverseString(u[1:-1])
u = list(u[1:-1])
for i in range(len(u)):
if u[i] == '(':
u[i]=')'
else:
u[i] = '('
t = ""
for i in range(len(u)):
t+=u[i]
print(t)
print(u)
answer+= "".join(u)
return answer
'알고리즘' 카테고리의 다른 글
연구소 (bfs/dfs) (0) | 2021.06.17 |
---|---|
경쟁적 전염 (bfs , 우선순위큐) (0) | 2021.06.17 |
연산자 끼워넣기 (dfs/ combinations/permutations) (0) | 2021.06.17 |
인구이동 (bfs) (0) | 2021.06.17 |
특정거리의 도시 (bfs/dfs) (0) | 2021.06.14 |