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)