[10937번] 이전 순열 ( 조합, 내림차순 )

알쓸코딩·2023년 12월 10일
0

코테 문제들

목록 보기
53/113


✅ 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	static int[] arr;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int n = Integer.parseInt(br.readLine());
		arr = new int[n];

		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		if (beforePermutation()) {
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
		} else {
			System.out.println(-1);
		}
	}

	private static boolean beforePermutation() {
		int i = arr.length - 1;

		while (i > 0 && arr[i] > arr[i - 1]) { //앞 배열이 더 클 때까지 --
			i--;
		}

		while (i == 0) {
			return false;
		}

		//내려갔는데 더 이전보다 큰 숫자가 나타나면
		int j = arr.length - 1;
		while (arr[i - 1] < arr[j]) { //arr[j]가 arr[i]보다 작을 때까지 뺸다.
			j--;
		}

		int temp = arr[i - 1];
		arr[i - 1] = arr[j];
		arr[j] = temp;

		int k = arr.length - 1;
		while (i < k) { //바꾸고 난 다음에는 순열을 내림차순으로
			temp = arr[i];
			arr[i] = arr[k];
			arr[k] = temp;
			i++;
			k--;
		}

		return true;

	}
}

profile
알면 쓸데있는 코딩 모음!

0개의 댓글