๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | Lv2] ๊ด„ํ˜ธ ๋ณ€ํ™˜ (Python) - 2020 KAKAO BLIND RECRUITMENT

sssbin 2023. 3. 7. 13:43

 

https://school.programmers.co.kr/learn/courses/30/lessons/60058

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

1. ๋นˆ ๋ฌธ์ž์—ด์ผ ๋•Œ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2. '('์™€ ')'๊ฐ€ ๊ฐ™์€ ๊ฐœ์ˆ˜๋งŒํผ ์žˆ์œผ๋ฉด ์ž˜๋ผ์„œ u, v๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. (๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด)

3. u๋ฅผ ๋ณต์‚ฌํ•œ ๋ฆฌ์ŠคํŠธ(tmp)๋ฅผ ์ƒ์„ฑํ•ด์„œ '()'๋ฅผ ๋นˆ ๋ฌธ์ž์—ด๋กœ ๊ต์ฒดํ•ด์ค€๋‹ค. 

4. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(tmp == '')์ด๋ฉด v๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ํ›„ u + ์žฌ๊ท€๊ฒฐ๊ณผ ๋ถ™์—ฌ์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

5. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด v๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ํ›„ '(' + ์žฌ๊ท€๊ฒฐ๊ณผ + ')' + u[1:-1] ๊ฑฐ๊พธ๋กœ ๋ถ™์—ฌ์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 60058: ๊ด„ํ˜ธ ๋ณ€ํ™˜ (2020 KAKAO BLIND RECRUITMENT)

def transfer(answer, p):
    left, right = 0, 0

    if p == '': # ๋นˆ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
        return p
    
    for i in range(len(p)):
        if p[i] == '(':
            left += 1
        else:
            right += 1
        
        if left == right: # ๋‘ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด u, v๋กœ ๋ถ„๋ฆฌ
            u = p[:i+1]
            v = p[i+1:]

            tmp = u[:]
            while '()' in tmp:
                tmp = tmp.replace('()', '')
            
            if tmp == '': # ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ผ ๋•Œ
                answer += u + transfer(answer, v)
                return answer
            
            else: # ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์•„๋‹ ๋•Œ
                tmp = '' # u์˜ ์ฒซ ๋ฒˆ์งธ, ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์ œ๊ฑฐ ํ›„ ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด์„œ ๋ถ™์ธ๋‹ค.
                for j in u[1:-1]:
                    if j == '(':
                        tmp += ')'
                    else:
                        tmp += '('
                answer += '(' + transfer(answer, v) + ')' + tmp
                return answer

def solution(p):
    answer = ''
    return transfer(answer, p)