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

 

혹시 코드에 이상한 부분이나 틀린 부분이 있던지, 이해가 안가는 부분이 있다면 댓글로 알려주세요.