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)
회고
조합이 만들어지면 튜플 형식으로 만들어지기 때문에 반드시 리스트로 감싸야 한다.
찍는게 버릇이 되서 계속 타입을 찍어보는데 시간이 너무 소요된다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준]2805 나무자르기(Python) (0) | 2024.01.06 |
---|---|
[백준]9663 N-Queen(Python) (1) | 2024.01.05 |
[백준]9095 1, 2, 3 더하기(Python) (0) | 2024.01.05 |
[백준]6603 로또(Python) (0) | 2024.01.03 |
[백준]2502 떡 먹는 호랑이(Python) (2) | 2023.12.31 |