카테고리 없음

[백준 - 10973] 이전 순열 (Java)

exception_log 2021. 2. 5. 16:00
 

10973번: 이전 순열

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

www.acmicpc.net

[ 풀이 ] 

다음 순열 문제와 매우 비슷했고, 부등호의 방향만 바꾸어주면 쉽게 해결할 수 있었다.

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        solution();
    }

    public static void solution() {
        Scanner scanner = new Scanner(System.in);

        int N = scanner.nextInt();
        int[] arr = new int[N];

        for (int i = 0; i < N; i++) {
            arr[i] = scanner.nextInt();
        }

        if (nextPermutaion(arr)){
            for (int value : arr) {
                System.out.print(value + " ");
            }
        } else {
            System.out.println(-1);
        }
    }
    public static boolean nextPermutaion(int[] arr) {
        int i = arr.length-1;
        while(i > 0 && arr[i] > arr[i-1]) {
            i--;
        }

        if(i == 0) //마지막 순열인 경우
            return false;

        int j = arr.length-1;
        while(arr[i-1] < arr[j]) {
            j--;
        }
        swap(arr, i-1, j);

        j = arr.length-1;
        while(i < j) {
            swap(arr, i, j);
            i++;
            j--;
        }

        return true;
    }

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

 

반응형