차이를 최대로
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> int main() { int arr[8]; int t; scanf("%d", &t); for (int i = 0; i < t; i++) { scanf("%d", &arr[i]); } int mem[8]; for (int i = 0; i < t; i++) { mem[i] = arr[i]; } int sum = -100; while (1) { int m = 0; for (int i = 0; i < t - 1; i++) { int s; s = arr[i] - arr[i + 1]; if (s < 0) { s = -s; } m += s; } if (m > sum) { sum = m; } std::next_permutation(arr, arr + t); // t-1? int flag = 0; for (int j = 0; j < t; j++) { if (arr[j] != mem[j]) { flag = 1; } } if (flag == 0) { break; } } printf("%d", sum); return 0; }
순열 문제이다. 순열 라이브러리 next/prev_permutation을 사용하여 해결하였다. 초기 입력값을 저장해두고 계속 next_permutaion을 진행하여 다음 순열의 경우를 판단한다. 저장 수열을 통해 한바퀴 돌았으면 while문 탈출 후 정답 출력.