BOJ 1182 부분수열의 합

LONGNEW·2021년 1월 27일
0

BOJ

목록 보기
111/333

https://www.acmicpc.net/problem/1182
시간 1초, 메모리 128MB
input :

  • N S(1 ≤ N ≤ 20, |S| ≤ 1,000,000)
  • 정수 (정수의 절댓값은 100,000을 넘지 않는다.)

output :

  • S가 되는 부분수열의 개수를 출력

조건 :

  • 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램

투 포인터를 이용하거나, 조합을 이용하는 방법이 존재할 거 같다.
나는 그냥 조합을 써서 합이 S이면 ans 값을 하나씩 증가시켰다.

import sys
from itertools import combinations

n, s = map(int, sys.stdin.readline().split())
data = list(map(int, sys.stdin.readline().split()))
ans = 0
for i in range(1, n + 1):
    for item in combinations(data, i):
        if sum(item) == s:
            ans += 1
print(ans)

투 포인터를 쓸 거라면 양수 리스트, 음수 리스트를 나누고.
양수의 모든 값을 더하고, cost를 표시하든지, 반대로 하든지 해서
근데 이렇게 해서 완전 탐색 하는 거긴 한데 ㅋㅋㅋㅋㅋㅋ 괜찮겠지 ...

0개의 댓글