https://www.acmicpc.net/problem/14225
14225번: 부분수열의 합
수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 수 있다. 하지만, 4는 만들 수 없기 때문에 정답은 4이다.
www.acmicpc.net
전에 풀었던 2437번과 완전 풀이가 같은 문제다. 그리디를 이용하여 풀었다. 입력 받은 수를 우선 오름차순으로 정렬을 한다. 그 다음 현재까지 더한 숫자보다 1 더 큰 수가 현재 인덱스 숫자보다 작으면 그것이 답이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, num, sum = 0;
vector<int> v;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
for (int i = 0; i < n; i++) {
if (sum + 1 < v[i]) { //현재까지 더한 값보다 1만큼 큰 수가 다음 원소보다 작으면
break; //못 만드니까 탈출
}
sum = sum + v[i];
}
cout << sum + 1; //답으로 현재까지 누적한 값 + 1을 출력
}
'백준' 카테고리의 다른 글
백준3055 - 탈출 (0) | 2020.02.11 |
---|---|
백준9020 - 골드바흐의 추측 (0) | 2020.02.10 |
백준15663 - N과 M(9) (0) | 2020.02.05 |
백준11375 - 열혈강호 (0) | 2020.02.05 |
백준11060 - 점프 점프 (0) | 2020.02.04 |