끄적끄적 코딩
article thumbnail

브루트포스 문제입니다.

최대 입력값이 8이므로 모든 경우의 수를 확인해도 시간초과가 발생하지 않습니다.
순열로 모든 경우의수를 확인합니다.
만들어진 순서로 계산하여 최대값이 나오는 것을 저장하여 출력해주었습니다.

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

public class Main {
  static int n;
  static int result;
  static int[] arr;
  static int[] visit;
  static int[] calc;

  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    n = Integer.parseInt(br.readLine());
    result = 0;
    arr = new int[n];
    visit = new int[n];
    calc = new int[n];

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

    for (int i = 0; i < n; ++i) {
      visit[i] = 1;
      dfs(i, 0);
      visit[i] = 0;
    }

    bw.write(result + "\n");
    bw.close();
  }

  public static void dfs(int index, int cnt) {
    calc[cnt] = arr[index];

    if (cnt == n - 1) {
      int sum = 0;

      for (int i = 1; i < n; ++i) {
        sum += Math.abs(calc[i - 1] - calc[i]);
      }
      result = Math.max(result, sum);

      return;
    }

    for (int i = 0; i < n; ++i) {
      if (visit[i] != 0) {
        continue;
      }

      visit[i] = 1;
      dfs(i, cnt + 1);
      visit[i] = 0;
    }
  }
}

'알고리즘' 카테고리의 다른 글

[Java] 백준 2467번 용액  (0) 2023.07.24
[Java] 백준 16194번 카드 구매하기 2  (0) 2023.07.22
[Java] 백준 1991번 트리 순회  (0) 2023.07.22
[Java] 백준 3343번 장미  (0) 2023.07.22
[Java] 백준 2141번 우체국  (0) 2023.07.19

검색 태그