~๋ชฉ์ฐจ~
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/60058
์์ฑ ์ฝ๋
def check(par): # ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ธ์ง ํ์ธํ๋ ํจ์
stack = []
for p in par:
if p == '(':
stack.append('(') # '('๋ผ๋ฉด ์คํ์ ์ฝ์
elif p == ')' and stack:
stack.pop() # ')'์ด๋ฉด์ ์คํ์ ๊ดํธ๊ฐ ์์ผ๋ฉด ์ถ๋ ฅ
else:
return False # ')'์ด๋ฉด์ stack์ ๊ดํธ๊ฐ ์์ ๋
return True
def swap_par(par): # ๊ดํธ ๋ฐฉํฅ ๋ฐ๊พธ๋ ํจ์
answer = ''
for p in par:
answer += '(' if p == ')' else ')'
return answer
def dfs(par):
if par == '':
return par # ๋ฌธ์์ด์ด ๊ณต๋ฐฑ์ด๋ผ๋ฉด ๊ณต๋ฐฑ ๋ฐํ
start = par[0]
stack = 0
for i, a in enumerate(par, start=1):
stack += 1 if a == start else -1 # ์ฒซ๋ฌธ์์ด๊ณผ ๊ฐ์ ๋ฌธ์์ด์ด๋ผ๋ฉด +1 ๋ค๋ฅด๋ค๋ฉด -1
if not stack: # ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด u ์ฐพ์
u, v = par[:i], par[i:]
break
v = dfs(v) # v์ ๋ํด์ ์ฌ๊ท์ ์ํ
if check(u): # u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด
return u + v
else: # u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด
return '(' + v + ')' + swap_par(u[1:-1])
def solution(p): # ๋ฉ์ธ ํจ์
return dfs(p)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉProgrammers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ๋ก๊ทธ๋๋จธ์ค ์ ํ์ ์๊ฐ ์ด๋ (0) | 2024.06.27 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ ธ์ด์ ํ | ์ฌ๊ท ํธ์ถ | ๋ถํ ์ ๋ณต (0) | 2023.12.25 |
[Python] ํ๋ก๊ทธ๋๋จธ์ค ํผ๋ณด๋์น ์ | DP (0) | 2023.06.26 |
[Python] ํ๋ก๊ทธ๋๋จธ์ค ๋ค์ ํฐ ์ซ์ (0) | 2023.06.26 |
[Python] ํ๋ก๊ทธ๋๋จธ์ค ๋จ์ด ๋ณํ | BFS (0) | 2023.06.26 |