코딩문제풀이/Baekjoon

[Java] 백준 10819번 : 차이를 최대로

코딩하는 포메라니안 2022. 12. 26. 23:37

1. 문제

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

 

10819번: 차이를 최대로

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

www.acmicpc.net

 

 

2. 풀이 과정

순열로 모든 경우의 수를 구하고, 순열마다 계산해서 최대값을 찾는다.

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

public class Main {
    static int N;
    static int[] arr, selected;
    static int result;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        arr = new int[N];
        selected = new int[N];
        result = 0;

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

        System.out.println(result);
    }

    public static void permutation(int count, boolean[] visited) {
        if(count == N) {
            cal();
            return;
        }
        for(int i = 0; i < N; i++) {
            if(visited[i]){continue;}
            visited[i] = true;
            selected[count] = arr[i];
            permutation(count+1, visited);
            visited[i] = false;

        }
    }

    public static void cal() {
        int sum = 0;
        for(int i = 1; i < N; i++) {
            sum +=  Math.abs(selected[i - 1] - selected[i]);
        }
        result =  Math.max(result, sum);
    }
}

 

 

결과