baekjoon
DFS
부분수열의합(백준1182)
N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오.
- 
    입력 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. 
- 
    출력 첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다. 
- 
    예제1 입력 5 0 -7 -3 -2 5 8 
- 
    예제1 출력 1 
논리적 사고
combinations(arr, 개수) : 개수에 따라배열의 조합을 뽑아준다. combinations(arr, 2) 이면 개수가 2인 [1,2] [1,1] [1,3] 처럼 개수(len)가 2인 모든 배열을 뽑아준다. from itertools import combinations 과 sys.stdin.readline 까먹지 말고 기억 좀 하기
풀이01.
import sys
from itertools import combinations
input = sys.stdin.readline
n, s = map(int, input().split())
arr = list(map(int, input().split()))
cnt = 0
for i in range(1, n+1):
    roi=combinations(arr, i)
    for x in roi:
        if sum(x)==s:
            cnt += 1
    
print(cnt)
          
댓글남기기