컴굥일지
[BOJ/백준 1182][C++] 부분수열의 합 본문
반응형
문제
https://www.acmicpc.net/problem/1182
문제 내용
N개의 정수로 이루어진 수열의, 크기가 양수인 부분집합 중에 합이 S인 경우의 수를 구하면 된다.
문제 풀이
모든 원소는 2가지로 구분된다.
부분수열에 포함되거나, 포함되지 않거나.
각 원소에 대해 포함된 경우와 포함되지 않는 경우를 계산해보면 된다.
단, 합이 0일 때는 모든 원소를 포함시키지 않는 경우(공집합)도 포함되므로, 개수에서 -1을 해줘야 한다.
코드
#include <iostream>
using namespace std;
int arr[20];
int n, s;
int cnt = 0;
void back(int current, int ssum) {
if (current == n) {
if (ssum == s) {
cnt++;
}
return;
}
back(current + 1, ssum); // arr[current]를 더하지 않는 경우
back(current + 1, ssum + arr[current]); // arr[current]를 더하는 경우
}
int main() {
cin >> n >> s;
for (int i = 0; i < n; i++)
cin >> arr[i];
back(0, 0);
// 크기가 양수인 부분수열만 카운트 해야 하는데, s==0인 경우는 공집합도 포함될 수 있어 -1 필요
if (s == 0)
cout << cnt - 1;
else
cout << cnt;
}
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[BOJ/백준 15650][C++] N과 M (2) (0) | 2023.07.16 |
---|---|
[BOJ/백준 15649][C++] N과 M (1) (0) | 2023.07.16 |
[BOJ/백준 1012][C++] 유기농 배추 (0) | 2023.07.15 |
[BOJ/백준 1074][C++] Z (0) | 2023.07.14 |
[BOJ/백준 11729][C++] 하노이 탑 이동 순서 (0) | 2023.07.14 |
Comments