https://programmers.co.kr/learn/courses/30/lessons/60058?language=python3
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
풀이
문제 설명에 나온 대로 구현했다.
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]) ))
'개발 > 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 |