본문 바로가기
백준/완전탐색

백준 10819. 차이를 최대로

by 29살아저씨 2021. 8. 26.
반응형

🅰 백준 10819. 차이를 최대로

 

10819번: 차이를 최대로

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

www.acmicpc.net

✏️ 문제 풀이

  • 백트래킹을 사용하지 않고 순열을 이용하여 모든 경우의 수에 따라 값을 구해준 다음에
  • Math.max 를 이용하여 차이가 최대값인 값을 지정해주었다.

✏️ 소스코드

package bruteforce;
import java.util.*;
import java.io.*;
public class Main_실버2_10819_손은성 {
	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		int input[] = new int[N];
		int max = Integer.MIN_VALUE;
		int ans = 0;
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < N; i++) {
			input[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(input);
		
		do {
			// ans 계산
			for (int i = 0; i < N-1; i++) {
				ans += Math.abs(input[i] - input[i+1]);
			}
			max = Math.max(max, ans);
			ans = 0;
		}while(np(input));
		
		System.out.println(max);
	}

	// next-permutation
	private static boolean np(int[] input) {
		int N = input.length-1;
		
		int i = N;
		while(i>0 && input[i-1]>=input[i]) --i;
		if(i == 0)
			return false;
		
		int j = N;
		while(input[i-1] >= input[j]) --j;
		swap(input, i-1, j);
		
		int k = N;
		while(i<k) swap(input, i++, k--);
		
		return true;
	}

	private static void swap(int[] input, int i, int j) {
		int temp = input[i];
		input[i] = input[j];
		input[j] = temp;
	}
}

 

✅ 후기

  •  
반응형

'백준 > 완전탐색' 카테고리의 다른 글

백준 6603. 로또  (0) 2021.08.26
백준 10971. 외판원 순회 2  (0) 2021.08.26
백준 9095. 1, 2, 3 더하기  (0) 2021.08.26
백준 10974. 모든 순열  (0) 2021.08.26
백준 10973. 이전순열  (0) 2021.08.26

댓글