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

 

1182번: 부분수열의 합

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

www.acmicpc.net

 

언어: 파이썬

난이도: 실버 2

코드

from itertools import combinations

N, S = input().split()
N = int(N)
S = int(S)
count = 0
arr = list(map(int, input().split()))  // 리스트에 담기

for i in range(1, N + 1):
    result = list(combinations(arr, i)) // arr의 값중 i개 선택  // combinations 라이브러리 -> 조합 

    for j in result: // result 리스트 안의 값을을 순차적으로 접근
        # print(j)
        if sum(j) == S:  // target 값과 같으면
            count += 1

print(count)

* 조합 : 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택하는 것

 

+ Recent posts