알고리즘/문제풀이

[10974] 모든 순열

BSHwan 2019. 10. 13. 21:22
반응형

https://www.acmicpc.net/problem/10974


import java.util.Scanner;

class Main {
	
	static int N;
	static int[] arr;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt();
		arr = new int[N];
		int number = 1;
		for(int i=0; i<N; i++) {
			arr[i] = number++;
		}
		
		perm(0);
		
	}
	
	public static void perm(int depth) {
		if(depth == N) {
			for(int i=0; i<N; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			return;
		}
		for(int i=depth; i<N; i++) {
			rightRotate(depth, i);
			perm(depth+1);
			leftRotate(depth, i);
		}
	}
	
	public static void rightRotate(int s, int e) {
		int temp = arr[e];
		
		for(int i=e; i>s; i--) {
			arr[i] = arr[i-1];
		}
		
		arr[s] = temp;
	}
	
	public static void leftRotate(int s, int e) {
		int temp = arr[s];
		
		for(int i=s; i<e; i++) {
			arr[i] = arr[i+1];
		}
		arr[e] = temp;
	}
}
반응형