알고리즘 PS
[Python] 2020 KAKAO BLIND RECRUITMENT - 괄호변환
on_doing
2021. 3. 4. 18:42
728x90
programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
[ 알고리즘 ]
구현
[문제 접근]
이 문제는 재귀함수와, 문제를 잘 이해하느냐가 관건인 문제인 것 같다.
올바른 괄호 문자열인지 아닌지를 판별하여 올바른 문자열일때와 올바른 문자열이 아닐 때로 나누어준다
[코드]
# u,v로 분리
# u 가 올바른 인지 아닌지
from collections import deque
def right(u): # 올바른 인지 아닌지
que=deque()
for i in u:
if i=='(':
que.append(i)
else:
if len(que)!=0:
que.pop()
if len(que)==0: # 올바른임
return True
else:
return False
def devide(w): #u와 v로 나누기
que_left=deque() # ( 담는 que
que_right=deque() # ) 담는 que
u=''
v=''
for i in range(len(w)):
if w[i]=='(':
que_left.append(w[i])
else:
que_right.append(w[i])
if len(que_left)==len(que_right):
u=w[0:i+1]
if i+1==len(w):
v=''
else:
v=w[i+1:]
break
return u,v
def Reverse(w): # 뒤집어주기
s=''
for i in w:
if i=='(':
s+=')'
else:
s+='('
return s
def solution(w):
answer = ''
# 주어진 w가 올바른이라면
if right(w)==True or w=='':
return w
u,v=devide(w)
if right(u)==True: # 올바른이라면
s=solution(v)
return u+s
else: #올바른이 아님
string="("
string+=solution(v)
string+=")"
u=u[1:-1]
u=Reverse(u)
string+=u
return string
728x90