반응형
https://programmers.co.kr/learn/courses/30/lessons/60058?language=python3
풀이
문제 설명에 나온 대로 구현했다.
isbal 은 균형잡힌 문자열인지 확인한다. flag가 음수라면 균형잡히지 않은 문자열이다
uv 는 u와 v 로 나누는 함수이다. flag가 0이되면 u와 v로 나눈다
def isbal(p):
flag = 0
for i in range(len(p)):
if p[i] == '(':
flag += 1
else:
flag -= 1
if flag < 0:
return False
return True
def uv(p):
flag = 0
br = ''
for i in range(len(p)):
if p[i] == '(':
flag += 1
br += p[i]
else:
flag -= 1
br += p[i]
if flag == 0:
u = br
v = p[i+1:]
return u, v
def solution(p):
ans = ''
if len(p) == 0:
return ans
u, v = uv(p)
if isbal(u):
ans += u + solution(v)
return ans
else:
ans += '(' + solution(v) + ')'
for i in range(1, len(u)-1):
if u[i] == '(':
ans += ')'
else:
ans += '('
return ans
다른 사람의 풂이
def solution(p):
if p=='': return p
r=True; c=0
for i in range(len(p)):
if p[i]=='(': c-=1
else: c+=1
if c>0: r=False
if c==0:
if r:
return p[:i+1]+solution(p[i+1:])
else:
return '('+solution(p[i+1:])+')'+''.join(list(map(lambda x:'(' if x==')' else ')',p[1:i]) ))
r은 isbal 과 같은 역할이고
c 는 uv 와 비슷한 역할인데
c == 0 and r 이면 if isbal(u)와 같은 부분이고
c ==0 and !r 이면 lambda로 내 코드의 else 부분을 구현한 것이다.
def solution(p):
if p=='':
return p
r=True
c=0
for i in range(len(p)):
if p[i]=='(':
c-=1
else:
c+=1
if c>0:
r=False
if c==0:
if r:
return p[:i+1]+solution(p[i+1:])
else:
return '('+solution(p[i+1:])+')'+''.join(list(map(lambda x:'(' if x==')' else ')',p[1:i]) ))
728x90
반응형
'개발 > Algorithm 문제 풀이' 카테고리의 다른 글
[프로그래머스] lv.1 신규 아이디 추천 (0) | 2022.05.24 |
---|---|
[프로그래머스] lv.1 부족한 금액 계산 (0) | 2022.05.24 |
[프로그래머스] lv.2 더 맵게 (0) | 2022.05.10 |
[프로그래머스] lv1 3진법 뒤집기 (0) | 2022.05.10 |
[프로그래머스] lv.1 두 개 뽑아서 더하기 (0) | 2022.05.10 |