Algorithm/BOJ(Baekjoon Online Judge)
[백준 - 10819번] 차이를 최대로 - Java //Wello Horld//
koucop
2019. 12. 13. 15:22
이번에는 BOJ의 10819번 문제 "차이를 최대로" 를 풀어보도록 하자
입력으로 첫째줄에 N이 주어지고, 둘째 줄부터 배열 A에 들어있는 정수가 주어진다. 정수는 -100 <= A[i] <= 100 이다.
출력으로 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 구하면 되는 문제이다.
먼저 배열을 정렬시키고, 하나씩 계산해 나가면서 값을 구하도록 하면 된다.
성공한 코드는 아래와 같다
import java.io.*;
import java.util.*;
public class sample {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int temp = Integer.parseInt(st.nextToken());
arr[i] = temp;
}
Arrays.sort(arr);
int ans = 0;
do {
int temp = 0;
for (int i = 0; i < arr.length - 1; i++){
temp += Math.abs(arr[i] - arr[i + 1]);
}
ans = Math.max(ans, temp);
} while (nextPermutation(arr));
bw.write(ans + "\n");
bw.flush();
br.close();
bw.close();
}
static boolean nextPermutation(int[] array) {
int i = array.length - 1;
while (i > 0 && array[i - 1] >= array[i]) {
i--;
}
if (i <= 0)
return false;
int j = array.length - 1;
while (array[j] <= array[i - 1]) {
j--;
}
int temp = array[i - 1];
array[i - 1] = array[j];
array[j] = temp;
j = array.length - 1;
while (i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
return true;
}
}
문제 : https://www.acmicpc.net/problem/10819
10819번: 차이를 최대로
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
www.acmicpc.net
혹시 코드에 이상한 부분이나 틀린 부분이 있던지, 이해가 안가는 부분이 있다면 댓글로 알려주세요.