ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
์ธ ์ง์ A, B, C๊ฐ ์๋ค. ํ์ฌ์๋ ํน๋ณํ ๋ฃฐ์ ๊ฐ์ง๊ณ ์์ด์ ํ๋ฃจ์ ํ ๋ช ๋ง ์ถ๊ทผํ๋ค. ๊ฐ ์ง์์ ๋ฐ๋ผ ์ถ๊ทผํ ์ ์๋ ๊ท์น์ด ์ ํด์ ธ ์๋ค. A์ ๊ฒฝ์ฐ ๋งค์ผ ์ถ๊ทผํ ์ ์์ผ๋ฉฐ, B์ ์ถ๊ทผํ ๋ค์๋ ์ ์ฌ์ด์ผ ํ๋ค. C์ ๊ฒฝ์ฐ ์ถ๊ทผํ ๋ค์๋ ๊ณผ ๊ทธ๋ค์ ๋ ๋ชจ๋ ์ฌ์ด์ผ ํ๋ค๋ ๊ท์น์ด ์๋ค.
๋ฐ๋ผ์ dp์ ๋ฐฐ์ด์ 5์ฐจ์ ๋ฐฐ์ด๋ก `dp[a][b][c][์ ์ ๋ ][์ ๋ ]`๊ณผ ๊ฐ์ด ๊ธฐ๋กํ์ฌ, ์ค๋ณต์ผ๋ก ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ์ง ์๋๋ก ํ์ฌ์ผ ํ๋ค. ๋ํ, ์ฌ์ฉ ๊ฐ๋ฅํ A, B, C์ ์์ ๋ฐ๋ผ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์๊ฐ๋ฉฐ ์ ๋ ์ B๊ฐ ์ผํ์๊ฑฐ๋, ์ ๊ณผ ์ ์ ๋ ์ C๊ฐ ์ผํ ๊ฒฝ์ฐ๋ ๊ฒฝ์ฐ์ ์์ ์ถ๊ฐ๋์ง ์๋๋ก ํ์ฌ ์ํ๋ ๋ต์ ์ฐพ์ ์ ์๋ค.
์ฝ๋
from sys import stdin
def dfs(a, b, c, prev):
# a, b, c์ ๊ฐ์๊ฐ ์ด๊ธฐ ์นด์ดํธ์ ๊ฐ์ผ๋ฉด ์ฐพ์ ๊ฒ
if [a, b, c] == cnt:
print(''.join(answer))
exit(0)
if dp[a][b][c][prev[0]][prev[1]]:
return False
dp[a][b][c][prev[0]][prev[1]] = True
# A๊ฐ์ ๋งํผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด
if a + 1 <= cnt[A]:
answer[a + b + c] = 'A'
if dfs(a + 1, b, c, [prev[1], A]):
return True
# B๊ฐ์ ๋งํผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด
if b + 1 <= cnt[B]:
answer[a + b + c] = 'B'
# ์ ๋ ์ ์ ํํ ๊ฒ์ด B๊ฐ ์๋๋ผ๋ฉด
if prev[1] != B:
if dfs(a, b + 1, c, [prev[1], B]):
return True
# C๊ฐ์ ๋งํผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด
if c + 1 <= cnt[C]:
answer[a + b + c] = 'C'
# ์ ์ ๋ ๊ณผ ์ ๋ ์ ์ ํํ ๊ฒ์ด C๊ฐ ์๋๋ผ๋ฉด
if prev[0] != C and prev[1] != C:
if dfs(a, b, c + 1, [prev[1], C]):
return True
return False
if __name__ == '__main__':
A, B, C = 0, 1, 2
s = list(stdin.readline().rstrip())
length = len(s)
answer = [''] * length
# a, b, c ๊ฐ์ ์นด์ดํธ.
cnt = [s.count(word) for word in ('A', 'B', 'C')]
dp = [[[[[False for _ in range(3)] for _ in range(3)] for _ in range(length)] for _ in range(length)] for _ in range(length)]
dfs(0, 0, 0, [0, 0])
print(-1)
5์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ๋ DP๋ฌธ์ ๋ฅผ ์ฒ์ ํ์ด๋ณด์๋ค. ํ๋ค ๋ณด๋ฉด์ ๋๋ผ๋๊ฑด DP๋ฅผ ํ๊ธฐ ์ํด ์ ์ ํ ๊ฐ์ง์น๊ธฐ๋ฅผ ์ค์ ํ๊ณ , ์ค๋ณต์ผ๋ก ํ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ ๊ฒ ๊ฐ๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 15989 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2020.09.28 |
---|---|
๋ฐฑ์ค: 12101 1, 2, 3 ๋ํ๊ธฐ 2 (0) | 2020.09.28 |
๋ฐฑ์ค: 11060 ์ ํ ์ ํ (0) | 2020.09.27 |
๋ฐฑ์ค: 16936 ๋3๊ณฑ2 (0) | 2020.09.26 |
๋ฐฑ์ค: 16938 ์บ ํ ์ค๋น (0) | 2020.09.26 |