https://programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
특정한 알고리즘이 쓰이지 않는 굉장히 쉬운 문제입니다.
문제부터 간단히 요약해보면,
'(' 와 ')'의 개수가 같다면 균형잡힌 괄호 문자열,
균형잡힌 괄호 문자열이면서 괄호의 짝 또한 모두 맞는 경우 올바른 괄호 문자열 으로 부르기로 정의합니다.
목표는 특정한 문자열을 문제에서 주어진 알고리즘을 통해 올바른 괄호 문자열으로 만드는 것입니다.
규칙은 다음과 같이 주어집니다.
solution(p)에
p : 균형잡힌 괄호 문자열
이 input으로 들어가면
올바른 괄호 문자열로 변환한 결과를 return해야 합니다.
<Solution>
문제에 주어진 알고리즘에 대한 이해 없이도 그냥 1~4-5까지의 step을 차례로 구현하면 됩니다.
python 에서는 variable = [] 에서 variable이 list object 자체를 의미하는 것이 아니라
list object를 가리키는 개념이기에 deepcopy를 해야할 때 해주는 정도만 주의하면 됩니다.
실제 구현은 아래와 같습니다.
import copy
def is_correct(list_type):
num1 = 0 # '('
num2 = 0 # ')'
for e in list_type:
if e == '(':
num1+=1
else:
num2+=1
if num2>num1:
return False
if num1 == num2:
return True
else:
return False
def solution(p):
# 1
list_p = list(p)
if len(list_p) == 0:
return ''
# 2
num1 = 0 # '('
num2 = 0 # ')'
index = 0
for index, e in enumerate(list_p):
if e == '(':
num1+=1
else :
num2+=1
if num1 == num2:
break
u = copy.deepcopy(list_p[:index+1])
v = copy.deepcopy(list_p[index+1:])
#3
if is_correct(u):
#3-1
return ''.join(u) + solution(''.join(v))
#4
else:
#4-1
new = '('
#4-2
new += solution(''.join(v))
#4-3
new += ')'
#4-4
del u[0]
del u[-1]
for index, e in enumerate(u):
if e == '(':
u[index] =')'
else:
u[index] = '('
new += ''.join(u)
return new
반응형
'코딩테스트 > Python 문제풀이' 카테고리의 다른 글
[프로그래머스] 입국심사(이분탐색) (0) | 2022.05.10 |
---|---|
[프로그래머스] 신고 결과 받기 (0) | 2022.05.09 |
[프로그래머스] N-Queen (0) | 2022.05.07 |
[프로그래머스] 순위(Floyd-Warshall Algorithm) (1) | 2022.05.06 |
[프로그래머스] 표 편집(Double Linked List) (0) | 2022.05.06 |