알고리즘
공집합을 제외한 2^n - 1개의 부분집합에 대해 모두 탐색을 실시한다. 이때 부분집합의 개수는 원소를 포함시킬것인가 아닌가 2가지로 나뉘어 2^n개임을 생각해보면 빽트래킹을 통해 쉽게 구할 수 있다고 생각하였다.
소스코드
# 부분수열의 합
import sys
n, s = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
result = 0
if s == 0: # s = 0 인경우 공집합을 제외
result = -1
def func(idx, S):
global result
if idx > n-1:
if S == s:
result += 1
return
func(idx + 1, S + arr[idx]) # 해당 요소 선택
func(idx + 1, S) # 해당 요소 선택x
func(0, 0)
print(result)
'백준 문제 풀이' 카테고리의 다른 글
[백준] 7490 "0 만들기" -python (2) | 2024.01.05 |
---|---|
[백준] 10997 "별찍기 - 22" 재귀 -python (1) | 2024.01.03 |
[백준] 1874 "스택 수열" -python (0) | 2024.01.02 |
[백준] 11054 "가장 긴 증가하는 부분 수열" -python (1) | 2024.01.02 |
[백준] 9663 "N-Queen" -python (1) | 2023.12.29 |