풀이1

T=int(input())
A=list(range(1,13))
for tc in range(1,T+1):
    n,k=map(int,input().split())
    cnt=0
    for i in range(1<<12):
        lst=[]
        total=0
        for j in range(12):
            if i & (1<<j):
                lst.append(A[j])
                print(lst)
                total+=A[j]
        if len(lst)==n and total==k:
            cnt+=1
    print(f'#{tc} {cnt}')

비트연산으로 모든 부분집합을 찾았다.

 

 

 

풀이2

from itertools import combinations
T = int(input())
for tc in range(1, T + 1):
    A=list(range(1, 13))				
    n,k = map(int, input().split())		
    ans=list(set(combinations(A, n)))	
    cnt=0
    for i in ans:        
        if sum(i) == k :				
            cnt+=1
    print(f'#{tc} {cnt}')

itertools의 combinations를 이용한다.