티스토리 뷰
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
'Coding Test > Baekjoon' 카테고리의 다른 글
[백준] 16947번 - 서울 지하철 2호선 / C++ (0) | 2021.01.13 |
---|---|
[백준] 16929번 - Tow Dots / C++ (0) | 2021.01.11 |
[백준] 14888번 - 연산자 끼워넣기 / C++ (0) | 2021.01.08 |
[백준] 6603번 - 로또 / C++ (0) | 2021.01.07 |
[백준] 1182번 - 부분수열의 합 / C++ (0) | 2021.01.07 |