<Algorithm> 16. 10819번 차이를 최대로
by BFine반응형
1. 10819번 차이를 최대로
순열을 활용하여 모든 경우의 수에 대한 차이값을 구하고 최댓값을 변화시켜준다.
주의할점은 입력의 순서대로가 아닌 임의로 들어올 경우 sort를 반드시 해주어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { static int max=-1; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int N=Integer.parseInt(br.readLine()); String[] in=br.readLine().split(" "); int[] input=new int[in.length]; for(int i=0;i<in.length;i++) { input[i]=Integer.parseInt(in[i]); } Arrays.sort(input); div(input); permetation(input); System.out.println(max); } public static void permetation(int[] input) { int i=input.length-1; int j=input.length-1; while(i>0) { if(input[i-1]<input[i]) { break; } i--; } if(i==0) return; while(i<=j) { if(input[i-1]<input[j]) { int temp=input[i-1]; input[i-1]=input[j]; input[j]=temp; break; } j--; } j=input.length-1; while(i<j) { int temp=input[j]; input[j]=input[i]; input[i]=temp; i++; j--; } div(input); permetation(input); } public static void div(int[] input) { int result=0; for(int i=0;i<input.length-1;i++) { result+=Math.abs(input[i]-input[i+1]); } if(max<result) { max=result; } } } | cs |
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 18. 1697번 숨바꼭질 (0) | 2018.07.30 |
---|---|
<Algorithm> 17. 10971번 외판원 순회2 (0) | 2018.07.29 |
<Algorithm> 15. 10973번 이전순열 (0) | 2018.07.27 |
<Algorithm> 14. 10972번 다음순열 (0) | 2018.07.27 |
<Algorithm> 13. 1463번 1로 만들기 (0) | 2018.07.24 |
블로그의 정보
57개월 BackEnd
BFine