개발자-H 입니다.

BOJ - 차이를 최대로 본문

Algorithm/문제 풀이

BOJ - 차이를 최대로

개발자-H 2021. 9. 24. 07:53

https://www.acmicpc.net/problem/10819

 

10819번: 차이를 최대로

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

www.acmicpc.net

 

  • 백트랙킹을 이용하여 수어진 배열의 모든 가지수를 구한다.
  • 주어진 수식으로 답을 구한 뒤 답중 최대 값을 출력한다.

 

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

public class Main {

    private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private static int maxSum = Integer.MIN_VALUE;

    public static void main(String[] args) throws IOException {
        int N = Integer.parseInt(br.readLine());

        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] arr = new int[N];
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        boolean[] visit = new boolean[N];
        int[] order = new int[N];
        dp(0, N, arr, visit, order);
        System.out.println(maxSum);
    }

    private static void dp(int depth, int n, int[] arr, boolean[] visit, int[] order) {
        if (depth == arr.length) {
            int sum = 0;
            for (int i = 0; i < order.length - 1; i++) {
                sum += Math.abs(order[i] - order[i + 1]);
            }
            maxSum = Math.max(sum, maxSum);
            return;
        }

        for (int i = 0; i < arr.length; i++) {
            if (visit[i]) continue;

            order[depth] = arr[i];
            visit[i] = true;
            dp(depth + 1, n, arr, visit, order);
            visit[i] = false;
        }
    }
}

 

'Algorithm > 문제 풀이' 카테고리의 다른 글

BOJ(10597) - 순열장난 (JAVA)  (0) 2021.09.26
BOJ - 모든 순열  (0) 2021.09.25
BOJ - 좋은 수열  (0) 2021.09.23
BOJ - 선발 명단  (0) 2021.09.23
BOJ - 암호 만들기  (0) 2021.09.22
Comments