👨🏻💻알고리즘/프로그래머스
[프로그래머스] Lv2. 괄호 변환
waveofmymind
2023. 2. 6. 23:14
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
from collections import deque
def sep(p):
open_s,close_s = 0,0
for i in range(len(p)):
if p[i] == '(':
open_s += 1
if p[i] == ')':
close_s += 1
if open_s == close_s:
u = p[:i+1]
v = p[i+1:]
return u,v
def check(u):
stack = []
for i in u:
if i == '(':
stack.append(i)
else:
if not stack:
return False
stack.pop()
return True if not stack else False
def solution(p):
if not p:
return p
u,v = sep(p)
if check(u):
return u + solution(v)
else:
answer = '('
answer += solution(v)
answer += ')'
for x in u[1:len(u)-1]:
if x == '(':
answer += ')'
else:
answer += '('
return answer
풀이
- u,v로 분리하는 로직과, 해당 문자열이 올바른 괄호쌍인지 판별하는 로직만 구현하면 쉽다.
- 문제를 해결하는 로직이 길어지면 함수를 나누는게 확실히 좋은 방법인 것 같다.