๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿฆ• ๊ณต๋ฃก์ด ๋˜์ž!

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Python ๊ด„ํ˜ธ๋ณ€ํ™˜ ๋ณธ๋ฌธ

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
๋ฐ˜์‘ํ˜•
Comments