Dev/PS

[백준] 10819 차이를 최대로 java

풋데브 2022. 2. 7. 00:18

import java.io.*;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int N;
    static int ans = 0;
    static StringTokenizer st;

    public static void recur(int[] A, int depth, int n) {
        //종료조건
        if(depth == N) {
            ans = Math.max(ans, calculate(A, n));
            return;
        }
        //재귀호출
        for(int i = depth; i < N; i++) {
            swap(A, i ,depth);
            recur(A, depth+1, n);
            swap(A, i, depth);
        }
    }

    public static int calculate(int[] arr, int n) {
        int sum = 0;
        for(int i = 0; i < n-1; i++) {
            sum += Math.abs(arr[i] - arr[i+1]);
        }
        return sum;
    }

    public static void swap(int[] A, int a, int b) {
        int tmp = A[a];
        A[a] = A[b];
        A[b] = tmp;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        int[] A = new int[N];
        for(int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }
        recur(A, 0, N);
        System.out.println(ans);
    }
}

기본적인 완전탐색이다. 순열 문제로 n개의 원소 중 r개의 원소를 뽑아서 중복없이 순서대로 나열한 후에 |A[0] - A[1]| + |A[1] - A[2]| ... + |A[N-2] - A[N-1]| 을 한 값중에서 MAX값을 출력해주면 된다.