문제
N개의 정수로 이루어진 배열 A가 주어진다. 이때, 배열에 들어있는 정수의 순서를 적절히 바꿔서 다음 식의 최댓값을 구하는 프로그램을 작성하시오.
A[0] - A[1] |
+ |
A[1] - A[2] |
+ … + |
A[N-2] - A[N-1] |
입력
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
출력
첫째 줄에 배열에 들어있는 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 출력한다.
예제 입력 1
예제 출력 1
풀이
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
| #include <iostream>
#include <algorithm>
using namespace std;
int main(){
int * arr ;
int num ,i,result=0;
cin >> num;
arr = new int[num];
for(i=0;i<num;i++)
cin >> arr[i]; // 배열 초기화
sort(arr,arr+num); //오름차순 STL
do{
int temp=0;
for(i=0;i<num-1;i++){
temp +=abs(arr[i]-arr[i+1]); //abs() : 절대값 함수
}
if(temp>result)
result = temp;
}while(next_permutation(arr,arr+num)); //다음 순열
cout << result <<endl; //결과 출력
} //int main()
|