[C/C++]백준 10819

 

백준 10819 - 차이를 최대로 (실버2)

10819 문제 링크

N개의 정수로 이루어진 배열 A가 주어진다. 이때, 배열에 들어있는 정수의 순서를 적절히 바꿔서 다음 식의 최댓값을 구하는 프로그램을 작성하시오.
A[0] - A[1] + A[1] - A[2] + … + A[N-2] - A[N-1]
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
- 벡터에 값을 저장하고, sort를 이용해서 정렬한다.
- next_permutation(num.begin(), num.end())를 이용해서 문제에 해당하는 모든 경우의 값을 구하고 max를 이용해서 제일 큰값만을 저장한다.
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;
int main() {
	int n,x;
	int result = 0;
	scanf("%d", &n);
	vector <int> num;
	int big = 0;
	for (int i = 0; i < n; i++) {
		scanf("%d", &x);
		num.push_back(x);
	}
	sort(num.begin(), num.end());
	do {
		for (int i = 0; i < num.size(); i++) {
			if (i == (num.size() - 1)) break;
			result += abs(num[i] - num[i + 1]);
		}
		big = max(result, big);
		result = 0;
	} while (next_permutation(num.begin(), num.end()));

	printf("%d", big);
	return 0;
}