ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋, ๊ดํธ๊ฐ ์ ๊ฑฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋๋ฅผ ์ฒดํฌํ์ฌ์ผ ํจ์ ์ ์ ์๋ค. ๋ฐ๋ผ์, ์ฌ๋ฐ๋ฅธ ๊ดํธ๋ฅผ ์ด๋ฃจ๋ ๊ฒฝ์ฐ๋ฅผ ํ๋จํ๊ณ ์ด์ ๋ฐ๋ผ `DFS`๋ฅผ ํตํด ๊ฐ์ง๋ฅผ ๋ป์ด๋๊ฐ์ผ ํ๋ค.
- `DFS`์์ ์ด๋ค ๊ฒฝ์ฐ๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ธ์ง ์ ์ ์์ผ๋ฏ๋ก, ๋ฏธ๋ฆฌ ์ฒดํฌ๋ฅผ ํ๋ค.
- ์ด๋ `stack`์ ์ฌ์ฉํ๋ฉฐ, ์ฌ๋ฐ๋ฅธ ๊ดํธ๋ฅผ ํ๋จํ๋ ๋ก์ง์์, ์ด๋ค ๊ฒฝ์ฐ ์ธ์ง ๊ธฐ๋กํ๋ ๊ฒฝ์ฐ๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
- `DFS`๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ง์น๊ธฐ ํ๋ค.
- ๊ดํธ๋ฅผ ์ง์ฐ๋ ๊ฒฝ์ฐ์ ์ง์ฐ์ง ์๋ ๊ฒฝ์ฐ๋ก ๋๋๋ค.
- ๋ต์ด ๋๋ ๋ฌธ์์ด์ ๊ตฌ์ฑํ ๋ ๋ฐฑ ํธ๋ํน์ด ๊ฐ๋ฅํ๋๋ก, `append`, `pop`์ ํ์ฉํ๋ค.
์ฝ๋
from sys import stdin
def dfs(cur_idx, depth):
global answer, sub_value
if cur_idx == depth:
# ์
๋ ฅ ๊ฐ (์์)์ ์ ์ธ.
if ''.join(sub_value) != ''.join(string):
answer.add(''.join(sub_value))
return
is_bracket = string[cur_idx]
# ์ฌ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ
if is_bracket == '(':
check[cur_idx] = True
dfs(cur_idx + 1, depth)
check[cur_idx] = False
# ๋ซ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ์ด๊ณ , ์ฒดํฌ ํด๋ ์์ ์๋ ๊ฒฝ์ฐ
if is_bracket == ')' and check[pair[cur_idx]]:
dfs(cur_idx + 1, depth)
# ๊ดํธ๋ฅผ ์ง์ฐ์ง ์๊ฑฐ๋, ์ผ๋ฐ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ
else:
sub_value.append(is_bracket)
dfs(cur_idx + 1, depth)
sub_value.pop()
if __name__ == '__main__':
string = list(stdin.readline().strip())
stack = []
check = [False for _ in range(len(string))]
pair = [0 for _ in range(len(string))]
answer = set()
sub_value = []
# ์ฌ๋ฐ๋ฅธ ๊ดํธ๋ผ๋ฆฌ, ์์ด ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฒดํฌํจ
for idx, bracket in enumerate(string):
if bracket == '(':
stack.append(idx)
elif bracket == ')':
pair[idx] = stack[-1]
pair[stack[-1]] = idx
stack.pop()
dfs(0, len(string))
# ์ถ๋ ฅ ์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ.
print('\n'.join(sorted(answer)))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 11000 ๊ฐ์์ค ๋ฐฐ์ (0) | 2021.03.15 |
---|---|
๋ฐฑ์ค: 16953 A โ B (0) | 2021.03.15 |
๋ฐฑ์ค: 2504 ๊ดํธ์ ๊ฐ (0) | 2021.03.12 |
๋ฐฑ์ค: 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (0) | 2021.03.10 |
๋ฐฑ์ค: 2493 ํ (0) | 2021.03.10 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ