뚱땅뚱땅

[문제] 백준 10972번 다음 순열 본문

알고리즘/백준

[문제] 백준 10972번 다음 순열

양순이 2021. 2. 16. 07:12
728x90

www.acmicpc.net/problem/10972

 

10972번: 다음 순열

첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.

www.acmicpc.net

 

풀이

 

public class BOJ_10972 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(in.readLine());
		int[] num = new int[N];
		
		StringTokenizer st = new StringTokenizer(in.readLine()," ");
		for(int i=0;i<N;i++) {
			num[i] = Integer.parseInt(st.nextToken());
		}
		
		int i=N-1;	//교환할 위치
		while(i>0 && num[i-1]>num[i]) i--;
		if(i==0) {
			System.out.println(-1);
			return;
		}
		
		int j= N-1;
		while(j>0&& num[i-1]>num[j]) j--;
		
		swap(num,i-1,j);
		
		int k = N-1;
		while(i<k) {
			swap(num, i++,k--);
		}
		
		for(int n: num) {
			System.out.print(n+" ");
		}
	}
	static void swap(int[] arr, int i, int j) {
		int tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
	}
}
728x90
Comments