10973 이전 순열 java
3257 단어 알고리즘브루트 포스 - 순열브루트 포스 - 순열
https://www.acmicpc.net/problem/10973
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B10973 {
public static void main(String[] args) throws NumberFormatException,IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
//수열 15432 입력하기
int arr[] = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0 ; i <N ;i++) {
arr[i]= Integer.parseInt(st.nextToken());
}
if(cal(arr)) {
for(int i = 0 ;i < N ;i++) {
System.out.print(arr[i]+"");
}
System.out.println();
} else {
System.out.println("-1");
}
}
public static boolean cal(int arr[]) {
int a = arr.length-1;
while(a>0&&arr[a-1]<=arr[a]) a--;
if(a<=0) return false; // a가 0이하가 될떄까지 반복문을 돌린다 , 즉 수열이 오름차순일떄 false를 리턴함
//a가 0까지 줄어들지 않아서 false가 리턴되지 않고 여기까지 진행된다면 여기에서 순서가 꼬인 부분을 찾을 수 있음
int b = arr.length-1; // 다시 위의 과정 반복
while(arr[a-1]<=arr[b]) b--; // 수열 21345 에서 여기에서 a은1이고 b=2일떄는 반복문이 돌지않아 b가 감소하지 않는다.
// 즉 인덱스 b가 2일때, 그때의 배열값부터 마지막 배열까지는 오름차순을 만족한다
int tmp = arr[a-1];
arr[a-1]=arr[b];
arr[b]= tmp;
// 인덱스 a부터 인덱스 마지막까지의 배열값을 내림차순으로 정렬한다
int start =a;
int end =arr.length-1;
while(start<end) {
tmp = arr[start];
arr[start] =arr[end];
arr[end] = tmp;
start++;
end--;
}
return true;
}
//수열 51234 등으로 확인해보기 (a=2,b=4)
// a = 베열값 오름차순이 시작되는 인덱스
// a-1 = 배열값 오름차순이 시작되기 직전의 인덱스
// b= 인덱스 a-1일때의 배열값보다 작으면서 오름차순이 끝나는 구간
}
Author And Source
이 문제에 관하여(10973 이전 순열 java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gloriousmin77/10973-이전-순열-java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)