https://programmers.co.kr/learn/courses/30/lessons/60058
생각
1. 올바른 괄호 문자열인지를 우선적으로 체크합니다.
2. 올바른 괄호 문자열이 아니면 재귀적인 처리를 모두 수행하는 solve 함수를 호출합니다.
3. solve 함수에서 균형잡힌 괄호 문자열 u,v로 분리합니다.
4. u가 올바른 괄호 문자열이면 v에 대해 다시 solve 함수를 호출합니다. -> u + solve(v)
5. u가 올바른 괄호 문자열이 아니라면 문제의 4-1 ~ 4-5 를 모두 수행합니다.
Python Code
def divide(p):
u,v = '',''
open, close = 0,0
for i,c in enumerate(p):
if c == '(':
open += 1
if c == ')':
close += 1
if open == close:
u = p[:i+1]
v = p[i+1:]
break
return u,v
def reverse(u):
ret = ''
for c in u:
if c =='(' : ret += ')'
if c == ')' : ret += '('
return ret
def solve(s):
if s == '':
return ''
u,v = divide(s)
if isCorrect(u):
return u + solve(v)
else: #4번 과정
return '(' + solve(v) + ')' + reverse(u[1:-1])
def isCorrect(u):
stack = []
for c in u:
if c == '(':
stack.append(c)
elif stack :
stack.pop()
return not stack
def solution(p):
answer = ''
# 올바른 괄호인지 확인
if isCorrect(p):
answer = p
else:
answer = solve(p)
# print(answer)
return answer
'Algorithm' 카테고리의 다른 글
[프로그래머스] Java - 경주로 건설 (0) | 2021.05.04 |
---|---|
[프로그래머스] Python - 키패드 누르기 (0) | 2021.05.03 |
[프로그래머스] Python - 보석 쇼핑 (0) | 2021.04.28 |
[프로그래머스] Python - 신규 아이디 추천 (0) | 2021.04.26 |
[SWEA] JAVA - 2382. [모의 SW 역량테스트] 미생물 격리 (0) | 2021.04.23 |