ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

14238๋ฒˆ: ์ถœ๊ทผ ๊ธฐ๋ก

์Šคํƒ€ํŠธ๋งํฌ์—๋Š” ์„ธ๋ช…์˜ ์ง์›์ด ์ผ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์„ธ ์ง์›์˜ ์ด๋ฆ„์€ ๊ฐ•ํ˜ธ(A), ์ค€๊ทœ(B), ์ˆ˜๋นˆ(C) ์ด๋‹ค. ์ด ํšŒ์‚ฌ์˜ ์ง์›์€ ํŠน๋ณ„ํ•œ ๋ฃฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ํ•˜๋ฃจ์— ํ•œ ๋ช…๋งŒ ์ถœ๊ทผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 3์ผ๊ฐ„์˜

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์„ธ ์ง์› 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๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ค‘๋ณต์œผ๋กœ ํƒ์ƒ‰๋  ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ž˜ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€