여름의 서재
[프로그래머스] 괄호 변환 본문
728x90
📕 문제
https://programmers.co.kr/learn/courses/30/lessons/60058
💡 풀이법
1. 올바른 괄호 문자열을 판별하는 balanced 함수를 따로 만들어 주었다.
2. 결과를 담을 answer 변수를 전역 변수로 만들어 주었다.
3. p가 빈값이거나 올바른 괄호 문자열이라면 answer에 p를 더해준다.
4. 그 외의 경우에는 문자열을 u, v로 나누어줘야한다.
(for문으로 문자열을 처음부터 돌면서 여는 괄호와 닫는 괄호의 개수가 같아지면 for 문을 멈춘다.
멈춘 index까지 u가 되고, 뒷부분은 v가 된다.)
6. u가 올바른 괄호 문자열이라면 answer에 u를 더하고 v에 대해 다시 solution함수를 실행시킨다.
7. u가 올바른 괄호 문자열이 아니라면, answer에 '('을 더해주고, v에 대해 다시 solution함수 실행시킨 후 answer에 ')'를 더한다. u의 양쪽을 제외하고 for문을 돌면서 '('이면 answer에 ')'를 더하고, ')'이면 '('를 더한다.
def balanced(p):
new = []
for i in p:
if i == '(':
new.append('(')
else:
if not new:
return False
else:
new.pop()
if new:
return False
else:
return True
answer = ''
def solution(p):
global answer
if not p or balanced(p):
answer += p
else:
open_cnt = close_cnt = 0
i = 0
for i in range(len(p)):
if p[i] == '(':
open_cnt += 1
else:
close_cnt += 1
if open_cnt == close_cnt:
break
u, v = p[:i+1], p[i+1:]
if balanced(u):
answer += u
solution(v)
else:
answer += '('
solution(v)
answer += ')'
for i in u[1:len(u)-1]:
if i == '(':
answer += ')'
else:
answer += '('
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 멀쩡한 사각형 (0) | 2021.11.17 |
---|---|
[프로그래머스] 수식 최대화 (0) | 2021.11.13 |
[프로그래머스] 타겟 넘버 (0) | 2021.11.07 |
[프로그래머스] 문자열 압축 (0) | 2021.11.07 |
[프로그래머스] 위클리챌린지_12주차_피로도 (0) | 2021.11.07 |
Comments