본문 바로가기
개발/Algorithm 문제 풀이

[프로그래머스] lv2 괄호 변환

by DenverAlmighty 2022. 5. 10.
반응형

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]) ))
728x90
반응형