내 접근: 연산 줄이기 위해 Sort → 어차피 맨 앞 원소부터 비교하므로 sum값이 가장 작은 것 부터 정렬되지 않고, 앞에 원소가 작은 것 부터 정렬됨 → sum 값이 K보다 커질 때 break 해버리면 뒤에 있는 맨 앞 원소는 크지만 뒤의 원소가 작아서 K값과 일치하는 리스트들이 잘려서 답과 달라짐.
꿀팁: 모든 부분 집합을 구하는 i/j 2중 for문 안에서 temp_list 변수 초기화 부분을 i와 j 사이에 두고 j 루프에서는 temp_list.append()로 값이 나오는 족족 추가하면 →i가 같고, j가 달라지는 상황에서 j 루프에서 나오는 것이 다 한 바구니에 담긴다.
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
full_list = []
answer = 0
#sum_value = 0
list_a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
n, k = map(int, input().split())
for i in range (1<<12):
temp_list = [] # 요기 있어야 아래 j 루프에서 다 담고 full_list에 추가해줌
for j in range (12):
if i & (1<<j):
temp_list.append (list_a[j]) # , end= ","는 print에만 쓸 수 있는 함수
if len(temp_list) == n:
full_list.append(temp_list) # j루프 밖에 있어야 중복 추가 안 됨
for l in range (len(full_list)):
if sum(full_list[l]) == k: #변수 명 조심! n, k는 이미 쓰이는 중
answer += 1
print (f'#{test_case} {answer}')