반응형
https://www.acmicpc.net/problem/1182
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
이 문제는 재귀 방식을 이용한 브루트 포스 방식으로 문제를 풀었다.
문제에서 조건이 크기가 양수인 부분 수열이기 때문에 수열의 크기가 0보다 크고 합이 s와 같을 경우에 cnt라는 리스트에 저장하도록 하여 cnt리스트의 개수가 출력되도록 하였다.
import sys
cnt=[]
input=sys.stdin.readline
def recur(i,res,sum,s,n):
if sum==s and len(res)>0:
cnt.append(0)
for idx in range(i,n):
res.append(ary[idx])
sum+=ary[idx]
recur(idx+1,res,sum,s,n)
res.pop()
sum-=ary[idx]
n,s = map(int,input().split())
ary = list(map(int,input().split()))
recur(0,[],0,s,n)
print(len(cnt))
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
Python 14225번 부분수열의 합 (0) | 2022.08.01 |
---|---|
Python 2529번 부등호 (0) | 2022.07.31 |
Python 6603번 로또 (0) | 2022.07.29 |
Python 1759번 암호 만들기 (0) | 2022.07.28 |
2096번 파이썬 (0) | 2022.05.04 |