백준풀이-python
12969 ABC
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)