티스토리 뷰

728x90

문제

수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오.

예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 수 있다. 하지만, 4는 만들 수 없기 때문에 정답은 4이다.

 

입력

첫째 줄에 수열 S의 크기 N이 주어진다. (1 ≤ N ≤ 20)

둘째 줄에는 수열 S가 주어진다. S를 이루고 있는 수는 100,000보다 작거나 같은 자연수이다.

 

출력

첫째 줄에 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 출력한다.

 

코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int N;
int num[20];
vector<int> is_possible;

void dfs(int i, int n, int sum)
{
	if (i > n)
	{
		return;
	}
	is_possible.push_back(sum);
	dfs(i + 1, n, sum + num[i]);
	dfs(i + 1, n, sum);
}

int main()
{
	int i;
	int answer = 1;

	cin >> N;
	if (N < 1 || N > 20)
	{
		return -1;
	}
	for (i = 0; i < N; i++)
	{
		cin >> num[i];
		if (num[i] > 100000)
		{
			return -1;
		}
	}
	dfs(0, N, 0);
	sort(is_possible.begin(), is_possible.end());
	is_possible.erase(unique(is_possible.begin(), is_possible.end()), is_possible.end());
	for (i = 1; i < is_possible.size(); i++)
	{
		if (is_possible[i] != i)
		{
			break;
		}
		answer++;
	}
	cout << answer << endl;

	return 0;
}

 

링크

 

14225번: 부분수열의 합

수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들

www.acmicpc.net

 

inbdni/Baekjoon

Contribute to inbdni/Baekjoon development by creating an account on GitHub.

github.com

 

728x90
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
공지사항
링크
Total
Today
Yesterday