Fug 2022. 5. 6. 15:00

https://www.acmicpc.net/problem/12969

 

12969번: ABC

첫째 줄에 문제의 조건을 만족하는 문자열 S를 출력한다. 가능한 S가 여러 가지라면, 아무거나 출력한다. 만약, 그러한 S가 존재하지 않는 경우에는 -1을 출력한다.

www.acmicpc.net

#전형적인 dp문제이다

#아이디어 자체는 생각이 났으나 구현이 어려워서 힘들었던 문제

#밑에서 위로 올려서 출력시키는 방식이 생각해내기 어려웠다.

#12969 ABC

import sys

input=sys.stdin.readline

n,k=map(int,input().split())

'''
for문으로 할수 있는가?

안됨 왜냐 순서대로 되는게 아님 ㅇㅇ

가지 뻗듯이 나가야함
알아야 하는것
1. a 이전개수
2. b 이전개수
3. 현재 가능한 쌍의 개수
4. 그것이 가능한가의 여부가 답에 필요한 요소
'''
 
dp=[[[0 for i in range(436)] for i in range(31)] for i in range(31)]

def solve(a,b,t,arr):
   
    if len(arr)==n:
       
        if t==k:
           
            print(arr)
           
            sys.exit(0)

        return

    if dp[a][b][t]:
       
        return
   
    solve(a+1,b,t,arr+'A')
    solve(a,b+1,t+a,arr+'B')
    solve(a,b,t+a+b,arr+'C')
       
solve(0,0,0,'')

print(-1)