백준 | 부분수열의 합

jeonghens·2024년 8월 6일

알고리즘: BOJ

목록 보기
72/125

백준 부분수열의 합 문제 풀이이다.


n개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분 수열 중에서 그 수열의 원소를 다 더한 값이 s가 되는 경우의 수를 구하는 프로그램을 작성하는 문제이다.


부분 수열이란 주어진 수열에서 원소들의 순서를 유지한 채, 일부 원소들을 골라낸 새로운 수열을 의미한다.

따라서 주어진 n개의 정수 중 1개, 2개, ..., n개를 고르는 조합 중 각 원소의 합이 s가 되는 것의 개수가 문제 조건을 만족하는 부분 수열의 개수가 된다.


이걸 코드로 구현하기 위해 itertools의 combinations 메서드를 썼다.

for 문을 통해 n개 중 i개를 선택하는 조합을 모두 구한 뒤, 각 케이스에 속한 원소의 합이 s가 되는 경우를 셌다.


코드(정답)는 다음과 같다.

import sys
from itertools import combinations


n, s = map(int, sys.stdin.readline().split())
numbers = list(map(int, sys.stdin.readline().split()))

cnt = 0
for i in range(1, n + 1):
    cases = list(combinations(numbers, i))
    for case in cases:
        if sum(case) == s:
            cnt += 1

print(cnt)
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글