Development/CodingTest

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Python κ΄„ν˜Έλ³€ν™˜

Kirok Kim 2022. 1. 23. 22:35
1. 풀이
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:])
                       # u        v

            else:
                return '('+solution(p[i+1:])+')'+''.join(list(map(lambda x:
                '(' if x==')' else ')',p[1:i]) )) ## 삼항식 μ•„λž˜μ™€ κ°™μŒ κ²°λ‘  μ•„λž˜ 풀이와 ν‘œν˜„λ§Œ 닀름
                                       # 이건 μ•ž λ’€ ν•œ κ°œμ”© 제거

 

2. 풀이
def parse(str):
    correct =True ## μ˜¬λ°”λ₯Έ λ¬Έμžμ—΄ νŒλ‹¨
    left =0 ## μ—΄λ¦°κ΄„ν˜Έ
    right=0 ## λ‹«νžŒκ΄„ν˜Έ
    st=[] ## μŠ€νƒκ΅¬μ‘°
    
    for i in range(len(str)):
        if str[i]=='(':
            left+=1
            st.append('(')
        else:
            right+=1
            if len(st)==0:
                correct=False ## μ•ˆλ§žλŠ”κ²½μš°
            else: ## μ—΄λ¦° κ΄„ν˜Έκ°€ μŠ€νƒμ— μžˆλŠ” 경우 짝이 λ§žμ„ 경우
                st.pop() ## μŠ€νƒμ—μ„œ μ—†μ•°
            
        if left==right:
            return i + 1, correct
            ## v의 인덱슀
        
    return 0,False ## μ—λŸ¬μžˆλŠ”κ²½μš° λ¬Έμ œμƒμ—μ„œλŠ” κ· ν˜•μž‘νžŒ κ΄„ν˜Έλ§Œ μ£Όμ–΄μ§€λ‹ˆ 이럴일 μ—†μŒ

## μ§€λ¬Έλ‚΄μš© κ·ΈλŒ€λ‘œ μ½”λ“œ κ΅¬ν˜„
def solution(p):
    if len(p)==0:
        return p
    
    pos,correct=parse(p)
    u = p[:pos]
    v=p[pos:]
    
    if correct:
        return u + solution(v)
    
    answer = '('+  solution(v)+')'
    for i in range(1,len(u)-1):
        if u[i]=='(':
            answer+=')'
        else:
            answer+='('
            
    return answer
λ°˜μ‘ν˜•