본문 바로가기
Develop/Python + SWEA

[SW Expert Academy] 4837. 부분집합의 합

by Tarra 2022. 2. 16.

4837. 부분집합의 합


문제)

1부터 12까지의 숫자를 원소로 가진 집합 A가 있다. 집합 A의 부분 집합 중 N개의 원소를 갖고 있고, 원소의 합이 K인 부분집합의 개수를 출력하는 프로그램을 작성하시오.

해당하는 부분집합이 없는 경우 0을 출력한다. 모든 부분 집합을 만들어 답을 찾아도 된다.

 

예를 들어 N = 3, K = 6 경우, 부분집합은 { 1, 2, 3 } 경우 1가지가 존재한다.

 
 

[입력]
 

첫 줄에 테스트 케이스 개수 T가 주어진다.  ( 1 ≤ T ≤ 50 )
 

테스트 케이스 별로 부분집합 원소의 수 N과 부분 집합의 합 K가 여백을 두고 주어진다. ( 1 ≤ N ≤ 12, 1 ≤ K ≤ 100 )

 

[출력]
 

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

 

 

풀이)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
= int(input())
for _ in range(T):
    n, k = map(int, input().split())
    li = [z for z in range(113)]
    answer = 0
 
    for i in range(1 << 12): # 모든 부분집합
        total = 0
        cnt = 0
        for j in range(12):
            if i & (1 << j):
                cnt += 1
                total += li[j]
        if total == k and cnt == n:
            answer += 1
    print(f"#{_ + 1} {answer}")
 
cs

 


문제 출처 : https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.

학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.