본문 바로가기

백준

백준14225 - 부분수열의 합

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