[์๊ณ ๋ฆฌ์ฆ PS] ๋ฐฑ์ค 10819๋ฒ ์ฐจ์ด๋ฅผ ์ต๋๋ก ์๋ฐ ๋ฌธ์ ํ์ด
๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 10819๋ฒ ์ฐจ์ด๋ฅผ ์ต๋๋ก ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
๋ก๊ทธ์ธ
www.acmicpc.net
10819๋ฒ: ์ฐจ์ด๋ฅผ ์ต๋๋ก
์ฒซ์งธ ์ค์ N (3 ≤ N ≤ 8)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ๋ฐฐ์ด A์ ๋ค์ด์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ๋ฐฐ์ด์ ๋ค์ด์๋ ์ ์๋ -100๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
www.acmicpc.net
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
๋ฌธ์ ์์ ์ฃผ์ด์ง ํ์ด ์กฐ๊ฑด์ ๊ทธ๋ฅ ์ด๋ ต์ง ์๋ค.
๋จ์ง ๊ฐ๊ฐ ์์์ ๋ค์ ์์์ ์ฐจ์ด๊ฐ ์ต๋๊ฐ ๋๋ ์์ ๋ง์กฑํ๋ ๊ฐ์ ์ฐพ์ผ๋ฉด ๋๋ค.
์ด๋ป๊ฒ ํ๋ฉด ์ฐจ์ด๊ฐ ์ต๋๊ฐ ๋ ๊น?
์์ง ๋์ ๋ฅ๋ ฅ์ผ๋ก๋ ์ฝ๊ฒ ์ ํ์์ด ๋ ์ค๋ฅด์ง ์๋๋ค.
ํ์ง๋ง ๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ด ๋๋ ์ฐจ์ด๋ฅผ ์ต๋๋ก ํ๊ธฐ ์ํด์๋ ์ ์์ ์์๋ฅผ ์ ์ ์ด ๋ฐ๊ฟ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๋ค๋ฉด ์ด์จ๋ ์ฐจ์ด๊ฐ ์ต๋๊ฐ ๊ตฌํด์ง ๊ฒ์ด๋ผ๋ ์๊ฐ์ ํ ์ ์๋ค.
๊ทธ๋ผ ์ ์์ ์์๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ๊ทธ๋ ๋ค. ๋ฐ๋ก ์์ด์ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ์ ์๊ฐ๋ถํฐ ํด์ ๊ณ์ Next Permutation ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ํ์ตํด์๋ค.
์ด ๋ฌธ์ ์์ ์ค์ ๋ก Next Permutation ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์์์ง ๋จผ์ ํ์ธ ๋ถํฐ ํด๋ณด์
Next Permutation ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ ์์ด์ ์์ ๊ฐ์ N๊ณผ ๊ฐ๊ฐ์ ์์ด์ N-1 ์ ๋ฐ๋ณตํ๋ฉฐ ๋น๊ต, ์ค์ ์ฐ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ N * N!
์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๊ฒ ๋๋ค.
์ด ๋ฌธ์ ์์ N์ ์ต๋ 8๊ฐ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก ์ต์
์ ๊ฒฝ์ฐ 8 * 8! = 322,560 ๋ฒ
์ด๋ผ๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋์จ๋ค.
์ถฉ๋ถํ ์๊ฐ ์์ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ผ next permutation์ ๊ตฌํํ์.
์ค๋ต ํ๋ณด
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์ด ํ๋ ์๋ค.
์์ด์ Next Permutation์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ณ์ฐ๋๋์ง ๊ธฐ์ต์ด ๋๋?
Next Permutation์ ์์ด์ ๊ธฐ์กด์ ์กด์ฌํ๋ ์์ด์ ์ ๋ ฌ ์ฌ๋ถ๋ ์์ฒญ๋ ์ํฅ์ ๋ฐ๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด์ ๋ด๊ฐ A = {1 2 3 4}
๋ผ๋ ์์ด๊ณผ B = {1 4 2 3}
์ด ์๋ค๊ณ ํด๋ณด์.
์ด ๋์ ์ฐจ์ด๋ ์์๋ ๊ฐ๊ณ ์ ๋ ฌ์ด ๋์ด์๋ ์๋์ด์๋์ ์ฐจ์ด์ด๋ค.
์ด ๋ ์์ด์ next permutation ์๊ณ ๋ฆฌ์ฆ์ ํตํด์ ์์ด์ ๊ตฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
next permutation ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ์ปจ์ ์์ฒด๊ฐ i์ j ๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋์ ๋น๊ต๋ฅผ ํ๋ฉฐ swap ์ฐ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ์ด ์์ด์ ๊ฒฐ๊ณผ์ ๋งค์ฐ ํฐ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค.
๊ทธ๋์ ์ ๋ ฌ๋์ง ์์ ์์ด์ ์์ด์ ์ ๋ ฌ๋ ์์ด์ ์์ด๋ณด๋ค ๋ ์ ๊ฒ ๋ค์ ์์ด์ฐ์ฐ์ ํ ๊ฒ์ด๊ณ ๊ฒฐ๊ตญ ๋ชจ๋ ์์๋ฅผ ์์ด๋ก ๋ํ๋ผ ์ ์๊ฒ ๋๋ฏ๋ก ์ด ์ ์ ์ฃผ์ ํ์.
์ ๋ต ์ฝ๋
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = input.nextInt();
}
int answer = 0;
Arrays.sort(arr);
do {
answer = Math.max(answer, getFormulaResult(arr));
} while(nextPermutation(arr));
System.out.println(answer);
}
private static boolean nextPermutation(int[] arr) {
int i = arr.length - 1;
while(i > 0 && arr[i-1] >= arr[i]) i--;
if(i <= 0) return false;
int j = arr.length - 1;
while(arr[i-1] >= arr[j]) j--;
swap(arr, i-1, j);
j = arr.length - 1;
while(i < j) {
swap(arr, i, j);
i++; j--;
}
return true;
}
private static void swap(int[] arr, int index1, int index2) {
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
private static int getFormulaResult(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length - 1; i++) {
sum += Math.abs(arr[i] - arr[i + 1]);
}
return sum;
}
}