Algorithm/SW Expert Academy

[Python] 4837. 부분집합의 합

느낌표 공장장 2021. 9. 6. 23:24
# 1 ~ 12까지의 숫자를 원소로 가진 집합 a
a = list(range(1, 13))
tc = int(input())

for idx in range(1, tc+1):
    # 만족해야하는 부분집합 원소의 수 n, 부분 집합의 합 k
    n, k = map(int, input().split())
    # 조건을 만족하는 부분집합의 개수
    count = 0

    # 모든 부분집합 검사
    for i in range(1<<12):
        subset_n = 0        # 부분집합 원소 개수
        subset_sum = 0      # 부분집합의 합

        # a의 모든 원소를 반복
        for j in range(12):
            # i의 j번째 비트가 1이라면 (찾으려는 부분집합(i)와 현재 인덱스(j) 사이의 교집합이 있다면)
            if i & (1<<j):
                subset_n += 1       # + 원소 개수
                subset_sum += a[j]  # + 원소 값

        # 부분집합의 원소 개수와 합이 각각 n, k라면 count + 1
        if subset_n == n and subset_sum == k:
            count += 1

    print('#{} {}'.format(idx, count))

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 4843. 특별한 탐색  (0) 2021.09.06
[Python] 4839. 이진탐색  (0) 2021.09.06
[Python] 4836. 색칠하기  (0) 2021.09.06
[Python] 1210. ladder1  (0) 2021.09.06
[Python] 1954. 달팽이 숫자  (0) 2021.08.11