https://programmers.co.kr/learn/courses/30/lessons/60058
특정한 알고리즘이 쓰이지 않는 굉장히 쉬운 문제입니다.
문제부터 간단히 요약해보면,
'(' 와 ')'의 개수가 같다면 균형잡힌 괄호 문자열,
균형잡힌 괄호 문자열이면서 괄호의 짝 또한 모두 맞는 경우 올바른 괄호 문자열 으로 부르기로 정의합니다.
목표는 특정한 문자열을 문제에서 주어진 알고리즘을 통해 올바른 괄호 문자열으로 만드는 것입니다.
규칙은 다음과 같이 주어집니다.
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 |