알고리즘/백준
[백준]1182 부분수열의 합(Python)
cha_eyoon
2024. 1. 3. 15:58
https://www.acmicpc.net/problem/1182
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
문제 접근
역시나 가장 먼저 생각난 방식은 조합이다.
total이라는 리스트에 가능한 조합을 다 담아두고 반복문을 돌면서 합과 일치하는 경우를 카운트 => 불필요
다 풀고 나니 total, compo 리스트 선언 필요하지 않고, 각 경우마다의 sum과 S의 일치 여부를 카운트
코드
from itertools import combinations
N, S = map(int, input().split())
cnt = 0
# total = []
my_list = list(map(int, input().split()))
# print(my_list)
for i in range(1, N+1):
# compo=[]
k = list(combinations(my_list, i))
for j in k:
# compo.append(list(j))
p = sum(list(j))
if p == S:
cnt += 1
# total.append(compo)
print(cnt)
회고
조합이 만들어지면 튜플 형식으로 만들어지기 때문에 반드시 리스트로 감싸야 한다.
찍는게 버릇이 되서 계속 타입을 찍어보는데 시간이 너무 소요된다.