[Python] 알고리즘/Silver

[1182] 부분수열의 합 (Python)

-Becca- 2022. 4. 4. 13:24

[문제]

https://www.acmicpc.net/problem/1182

 

1182번: 부분수열의 합

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net


알고리즘 분류는 브루트포스 알고리즘, 백트래킹 입니다.

저는 python의 combinations를 사용하여 모든 경우의 수를 구한 뒤, 더한 결과를 비교하였습니다.


[코드]

import sys
from itertools import combinations

N, S = map(int, sys.stdin.readline().split())
li = list(map(int, sys.stdin.readline().split()))

all_li = list()
for i in range(1, N + 1):
    all_li += list(combinations(li, i))

cnt = 0
for i in all_li:
    if sum(i) == S:
        cnt += 1
        
print(cnt)